Chủ đề Nội dung:
- Chạy một lệnh Linux đơn giản
- Chạy lệnh với dữ liệu đầu vào
- Chạy tập lệnh Python
- Xử lý lỗi quy trình con
- Trả về mã của Subprocess.Popen
- Chuyển hướng đầu ra của quy trình con sang tệp
- Đa xử lý bằng Subprocess.Popen
- Xử lý luồng đầu vào và đầu ra S
- Kiểm soát thời gian chờ và độ trễ
- Đọc đầu vào truyền phát
Chạy một lệnh Linux đơn giản
Lệnh “date” được sử dụng để hiển thị ngày giờ hiện tại của hệ thống. Tạo một tệp Python có đoạn script sau để tạo một quy trình con thực thi lệnh “date” và in kết quả đầu ra của lệnh này:
#Nhập mô-đunnhập khẩu quy trình con
#Xác định lệnh cho quy trình con và
#open quy trình bằng cách sử dụng hàm Popen()
đầu ra = quy trình con . Popen ( [ 'ngày' ] , thiết bị xuất chuẩn = quy trình con . ĐƯỜNG ỐNG )
#Truy xuất kết quả và lỗi bằng cách liên lạc với quy trình
thiết bị xuất chuẩn , lỗi chuẩn = đầu ra. giao tiếp ( )
#In đầu ra
in ( thiết bị xuất chuẩn. giải mã ( ) )
Đầu ra:
Đầu ra sau xuất hiện sau khi thực thi tập lệnh trước:
Chạy lệnh với dữ liệu đầu vào
Lệnh “wc” với tùy chọn “-c” được sử dụng để đếm tổng số ký tự của giá trị chuỗi được cung cấp cùng với lệnh này. Tạo một tệp Python có đoạn mã sau để tạo một quy trình con với hàm Popen() để chạy các lệnh “wc –c”. Giá trị chuỗi được lấy từ thiết bị đầu cuối sau khi thực thi tập lệnh và tổng số ký tự của chuỗi đầu vào được in ở đầu ra.
#Nhập mô-đunnhập khẩu quy trình con
#Xác định lệnh cho quy trình con và
#Mở tiến trình bằng hàm Popen()
đầu ra = quy trình con . Popen ( [ 'wc' , '-c' ] , thiết bị xuất chuẩn = quy trình con . ĐƯỜNG ỐNG )
#Truy xuất kết quả và lỗi bằng cách liên lạc với quy trình
thiết bị xuất chuẩn , lỗi chuẩn = đầu ra. giao tiếp ( )
#In đầu ra
in ( thiết bị xuất chuẩn. giải mã ( ) )
Đầu ra:
Đầu ra sau đây xuất hiện cho giá trị đầu vào “Ví dụ về quy trình con Python”:
Chạy tập lệnh Python
Tạo một tệp Python có tên “sum.py” với tập lệnh sau để tính tổng của hai số và những số này được cung cấp dưới dạng đối số dòng lệnh:
sum.py
#Nhập mô-đun cần thiếtnhập khẩu hệ thống
#Đếm tổng số đối số
N = chỉ một ( hệ thống . argv )
#Thêm hai giá trị đối số đầu tiên
Tổng = int ( hệ thống . argv [ 1 ] ) + int ( hệ thống . argv [ 2 ] )
#In kết quả phép cộng
in ( 'Tổng của ' + hệ thống . argv [ 1 ] + ' Và ' + hệ thống . argv [ 2 ] + ' là' , Tổng )
Tạo một Python tài liệu với đoạn script sau sẽ chạy Python tài liệu được đặt tên Tổng . py với hai đối số bằng cách tạo ra một quy trình con .
#Nhập mô-đun
nhập khẩu quy trình con
#Chạy tập lệnh python trong quy trình con và
#mở quy trình bằng cách sử dụng hàm Popen()
đầu ra = quy trình con . Popen ( [ 'trăn3' , 'sum.py' , '25' , '55' ] , thiết bị xuất chuẩn = quy trình con . ĐƯỜNG ỐNG ) #Truy xuất kết quả và lỗi bằng cách liên lạc với quy trình
thiết bị xuất chuẩn , lỗi chuẩn = đầu ra. giao tiếp ( )
#In đầu ra
in ( thiết bị xuất chuẩn. giải mã ( ) )
Đầu ra:
Đầu ra sau xuất hiện sau khi thực thi tập lệnh trước:
`
Xử lý lỗi quy trình con
Tạo một tệp Python có tập lệnh sau để xử lý các lỗi của quy trình con bằng cách sử dụng khối “thử ngoại trừ”. Một lệnh được lấy từ người dùng và nó được thực thi bởi quy trình con. Thông báo lỗi được hiển thị nếu có bất kỳ lệnh không hợp lệ nào được lấy từ người dùng.
#Nhập mô-đunnhập khẩu quy trình con
nhập khẩu hệ thống
#Nhận lệnh từ người dùng
yêu cầu = đầu vào ( 'Nhập lệnh hợp lệ:' )
thử :
#Mở tiến trình bằng hàm Popen()
đầu ra = quy trình con . Popen ( [ yêu cầu ] , thiết bị xuất chuẩn = quy trình con . ĐƯỜNG ỐNG )
#Truy xuất đầu ra và lỗi bằng cách liên lạc với quy trình
thiết bị xuất chuẩn , lỗi chuẩn = đầu ra. giao tiếp ( )
#In đầu ra
in ( thiết bị xuất chuẩn. giải mã ( ) )
ngoại trừ :
in ( 'Lỗi:' , hệ thống . ex_info ( ) )
Đầu ra:
Đầu ra sau đây xuất hiện nếu lệnh “pwd” được lấy làm đầu vào là lệnh hợp lệ:
Đầu ra sau đây xuất hiện nếu lệnh “usr” được lấy làm đầu vào là lệnh hợp lệ:
Trả về mã của Subprocess.Popen
Tạo một tệp Python có đoạn mã sau để thực thi lệnh “ls” thông qua quy trình con để lấy danh sách tất cả các tệp Python từ vị trí hiện tại. Tập lệnh chờ hoàn tất quy trình con và in mã trả về.
#Nhập mô-đunnhập khẩu quy trình con
nhập khẩu hệ thống
#Đặt lệnh
yêu cầu = [ 'l' , '-l' , '*.py' ]
thử :
#Mở tiến trình bằng hàm Popen()
đầu ra = quy trình con . Popen ( yêu cầu , thiết bị xuất chuẩn = quy trình con . ĐƯỜNG ỐNG ,
lỗi chuẩn = quy trình con . ĐƯỜNG ỐNG , chữ = ĐÚNG VẬY )
#Chờ hoàn tất quá trình
mã ret = đầu ra. Chờ đợi ( )
#In mã trả lại
in ( 'Mã trả lại:' , mã ret )
ngoại trừ :
#In thông báo lỗi cho sai
in ( 'Lỗi:' , hệ thống . ex_info ( ) )
Đầu ra:
Một đầu ra tương tự xuất hiện sau khi thực thi tập lệnh trước đó:
Chuyển hướng đầu ra của quy trình con sang tệp
Tạo một tệp Python có đoạn script sau để ghi đầu ra của quy trình con vào một tệp văn bản. Lệnh được thực thi bởi quy trình con được lấy từ người dùng.
#Nhập mô-đunnhập khẩu quy trình con
#Xác định tên tệp
tên tập tin = 'outfile.txt'
#Nhận lệnh ping
cmd = đầu vào ( 'Nhập lệnh ping:' )
#Split đầu vào đã lấy dựa trên khoảng trắng
lập luận = cmd . tách ra ( )
#Viết đầu ra lệnh vào tệp
với mở ( tên tập tin , 'TRONG' ) BẰNG dữ liệu lỗi thời:
quá trình = quy trình con . Popen ( lập luận , thiết bị xuất chuẩn = dữ liệu lỗi thời )
#Chờ hoàn tất quá trình
return_code = quá trình. Chờ đợi ( )
Đầu ra:
Theo kết quả đầu ra sau đây, “ping -c 3 www.google.com Lệnh ” được lấy từ người dùng và lệnh “cat” được sử dụng để hiển thị nội dung của tệp được ghi bởi quy trình con:
Đa xử lý bằng Subprocess.Popen
Tạo một tệp Python với tập lệnh sau trong đó việc sử dụng đa xử lý được hiển thị bằng subprocess. Ở đây, một hàm có tên display_msg() được gọi nhiều lần bằng cách sử dụng đa xử lý.
#Nhập các mô-đun cần thiếtnhập khẩu đa xử lý
nhập khẩu quy trình con
#Xác định hàm sẽ được gọi bằng đa xử lý
chắc chắn display_msg ( N ) :
#Xác định lệnh bằng hàm format()
cmd = 'echo 'Lập trình Python'' . định dạng ( N )
#Mở tiến trình bằng hàm Popen()
quá trình = quy trình con . Popen ( cmd , vỏ bọc = ĐÚNG VẬY , thiết bị xuất chuẩn = quy trình con . ĐƯỜNG ỐNG )
#Truy xuất kết quả và lỗi bằng cách liên lạc với quy trình
thiết bị xuất chuẩn , lỗi = quá trình. giao tiếp ( )
#In đầu ra
in ( thiết bị xuất chuẩn. giải mã ( ) )
#Gọi hàm 5 lần bằng cách tạo multiprocessing.Pool
với đa xử lý. Hồ bơi ( đa xử lý. CPU_count ( ) ) BẰNG mp:
#Bản đồ chức năng
mp. bản đồ ( display_msg , phạm vi ( 1 , 5 ) )
Đầu ra:
Đầu ra sau xuất hiện sau khi thực thi tập lệnh trước:
Xử lý luồng đầu vào và đầu ra
Tạo một tệp văn bản có tên “test.txt” với nội dung sau trước khi tạo tập lệnh Python của ví dụ này.
test.txt
PERL
trăn
đánh đập
php
Tạo một tệp Python có tập lệnh sau sử dụng một quy trình con để đọc nội dung của tệp “test.txt” và một quy trình con khác để tìm kiếm một từ cụ thể trong tệp văn bản đó. Ở đây, từ “python” được tìm kiếm trong “tệp test.txt” có chứa từ này.
#Nhập mô-đunnhập khẩu quy trình con
#Xác định quy trình cho luồng đầu vào
đang tiến hành = quy trình con . Popen ( [ 'con mèo' , 'test.txt' ] , thiết bị xuất chuẩn = quy trình con . ĐƯỜNG ỐNG , chữ = Trù > #Xác định quy trình cho luồng đầu ra
out_process = quy trình con . Popen (
[ 'nắm chặt' , 'trăn' ] , stdin = đang tiến hành. thiết bị xuất chuẩn ,
thiết bị xuất chuẩn = quy trình con . ĐƯỜNG ỐNG , chữ = ĐÚNG VẬY )
#Lưu trữ đầu ra của quá trình đầu vào và đầu ra
đầu ra , _ = out_process. giao tiếp ( )
#In đầu ra
in ( 'Đầu ra:' , đầu ra )
Đầu ra:
Đầu ra sau xuất hiện sau khi thực thi tập lệnh:
Kiểm soát quy trình con bằng bộ hẹn giờ
Tạo một tệp Python có tập lệnh sau sử dụng bộ đếm thời gian để thực thi lệnh bằng quy trình con. Ở đây, khối “thử ngoại trừ” được sử dụng để khởi động bộ hẹn giờ và khối “cuối cùng” được sử dụng để hủy bộ hẹn giờ.
#Nhập mô-đun quy trình connhập khẩu quy trình con
#Nhập mô-đun Hẹn giờ
từ luồng nhập khẩu hẹn giờ
#Xác định lệnh
cmd = [ 'ping' , 'www.example.com' ]
#Mở quy trình
P = quy trình con . Popen (
cmd , thiết bị xuất chuẩn = quy trình con . ĐƯỜNG ỐNG , lỗi chuẩn = quy trình con . ĐƯỜNG ỐNG )
#Xác định bộ đếm thời gian
hẹn giờ = hẹn giờ ( 2 , lambda quá trình: quá trình. giết ( ) , [ P ] )
thử :
#Bắt đầu hẹn giờ
hẹn giờ. bắt đầu ( )
#Đọc đầu ra
thiết bị xuất chuẩn , _ = P. giao tiếp ( )
#In đầu ra
in ( thiết bị xuất chuẩn. giải mã ( ) )
ngoại trừ :
#In thông báo lỗi cho sai
in ( 'Lỗi:' , hệ thống . ex_info ( ) )
Cuối cùng :
#Dừng đồng hồ
hẹn giờ. Hủy bỏ ( )
Đầu ra:
Đầu ra sau xuất hiện sau khi thực thi tập lệnh:
Đọc đầu vào truyền phát
Tạo một tệp Python đọc nội dung của đầu ra của quy trình con bằng vòng lặp “while” và lưu trữ nội dung vào một biến. Nội dung của biến này được in sau. Ở đây, lệnh “curl” được sử dụng trong quy trình con cho www.google.com URL.
#Nhập mô-đunnhập khẩu quy trình con
#Xác định lệnh
cmd = [ 'Xoăn' , 'www.example.com' ]
P = quy trình con . Popen ( cmd , thiết bị xuất chuẩn = quy trình con . ĐƯỜNG ỐNG ,
lỗi chuẩn = quy trình con . ĐƯỜNG ỐNG , chữ = ĐÚNG VẬY >
#Khởi tạo biến đầu ra
đầu ra = ''
trong khi ĐÚNG VẬY :
#Đọc từng dòng đầu ra của quá trình
ln = P. thiết bị xuất chuẩn . dòng đọc ( )
#Chấm dứt khỏi vòng lặp khi tiến trình con kết thúc
nếu như không Tôi:
phá vỡ
đầu ra = đầu ra + ln
#In dòng
in ( đầu ra )
#Nhận mã trả lại sau khi kết thúc quá trình
return_code = P. Chờ đợi ( )
#In mã trả lại
in ( 'Mã trả lại:' , return_code )
Đầu ra:
Phần cuối cùng của ba đầu ra được hiển thị trong hình ảnh sau đây. Mã trả về sau khi hoàn thành quy trình con là 0:
Phần kết luận
Các cách sử dụng khác nhau của quy trình con Python.Popen() được hiển thị trong hướng dẫn này bằng cách sử dụng nhiều tập lệnh Python sẽ giúp người dùng Python biết cách sử dụng cơ bản của hàm này.