Ví dụ về quy trình con Python.Popen

Vi Du Ve Quy Trinh Con Python Popen



Quy trình con Python là một trong những mô-đun hữu ích được sử dụng để chạy các lệnh, quy trình shell khác nhau và thực thi một tập lệnh hoặc tệp thực thi khác bằng cách sử dụng tập lệnh Python. Nó cũng có thể được sử dụng để chuyển hướng dữ liệu từ quy trình này sang quy trình khác và xử lý các lỗi do quy trình con tạo ra. Mô-đun quy trình con có nhiều lớp được sử dụng cho nhiều mục đích khác nhau. Lớp “subprocess.Popen” là một trong các lớp của mô-đun này được sử dụng để tương tác với các quy trình bên ngoài và thực hiện các loại tác vụ khác nhau giữa các quy trình. Nhiều cách sử dụng của lớp “subprocess.Popen” trong tập lệnh Python được trình bày trong hướng dẫn này.

Chủ đề Nội dung:

  1. Chạy một lệnh Linux đơn giản
  2. Chạy lệnh với dữ liệu đầu vào
  3. Chạy tập lệnh Python
  4. Xử lý lỗi quy trình con
  5. Trả về mã của Subprocess.Popen
  6. Chuyển hướng đầu ra của quy trình con sang tệp
  7. Đa xử lý bằng Subprocess.Popen
  8. Xử lý luồng đầu vào và đầu ra S
  9. Kiểm soát thời gian chờ và độ trễ
  10. Đọ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ô-đun

nhậ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:



  p1



Lên đầu trang





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ô-đun

nhậ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”:

Lên đầu trang

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ết

nhậ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:

Lên đầu trang

`

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ô-đun

nhậ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ệ:

  p4-1

Đầ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ệ:

  p4-2

Lên đầu trang

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ô-đun

nhậ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 đó:

Lên đầu trang

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ô-đun

nhậ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:

Lên đầu trang

Đ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ết

nhậ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:

Lên đầu trang

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ô-đun

nhậ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:

Lên đầu trang

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 con

nhậ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:

Lên đầu trang

Đọ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ô-đun

nhậ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:

Lên đầu trang

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.