Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Cara menggunakan modul subproses untuk pengurusan subproses dalam Python 3.x

Cara menggunakan modul subproses untuk pengurusan subproses dalam Python 3.x

王林
王林asal
2023-08-01 13:04:501259semak imbas

Cara menggunakan modul subproses untuk pengurusan subproses dalam Python 3.x

Pengenalan:
Dalam pengaturcaraan Python, kita selalunya perlu berinteraksi dengan arahan atau atur cara luaran, seperti melaksanakan perintah sistem, memulakan aplikasi lain atau memanggil skrip lain. Pengurusan subproses merujuk kepada operasi mencipta, mengawal dan berkomunikasi dengan subproses dalam program Python. Python menyediakan modul subproses untuk mengendalikan pengurusan subproses, yang merupakan alat yang berkuasa dan fleksibel. Artikel ini akan memperkenalkan cara menggunakan modul subproses untuk mencipta, mengawal dan berkomunikasi dengan subproses.

1. Penciptaan subproses
Mencipta subproses menggunakan modul subproses adalah sangat mudah Anda boleh mencipta objek subproses dengan memanggil terus pembina kelas Popen. Berikut ialah kod sampel mudah:

import subprocess

# 执行一个系统命令,输出结果到标准输出
subprocess.Popen(["ls", "-l"])

Dalam contoh ini, kami menggunakan kaedah pembina kelas Popen untuk mencipta objek subproses Parameter yang diluluskan ialah senarai, dan elemen pertama senarai ialah arahan untuk menjadi dilaksanakan Elemen berikut adalah parameter arahan. Kod di atas akan melaksanakan perintah sistem ls -l dan mengeluarkan hasilnya kepada output standard. ls -l,并将结果输出到标准输出。

除了上述的方式外,我们还可以通过在创建子进程对象时指定参数 shell=True 来执行 Shell 命令。示例代码如下:

import subprocess

# 执行一个 Shell 命令
subprocess.Popen("ls -l", shell=True)

在上述代码中,我们将Shell命令 "ls -l" 作为参数传给 Popen 类的构造方法,并通过参数 shell=True 来执行 Shell 命令。

二、子进程的控制
在子进程创建成功后,我们可以使用子进程对象的各种方法来控制子进程的行为。下面是一些常用的方法:

  1. wait():等待子进程结束并返回状态码。
  2. communicate(input=None):与子进程进行交互,可以向子进程发送内容,也可以获取子进程的输出结果。
  3. poll():检查子进程是否结束,如果结束则返回进程的状态码,未结束则返回 None。

下面是一个示例代码,在子进程结束时获取输出结果并输出:

import subprocess

# 执行一个系统命令,获取输出结果
p = subprocess.Popen(["ls", "-l"], stdout=subprocess.PIPE)
output, error = p.communicate()
print(output.decode("utf-8"))

在上述代码中,我们使用 communicate() 方法与子进程进行交互,获取子进程的输出结果并赋值给变量 output。接着使用 decode("utf-8") 方法将二进制字符串转换为 UTF-8 编码的字符串,并打印输出。

三、子进程的通信
使用 communicate() 方法可以很方便地与子进程进行通信,不仅可以发送数据给子进程,还可以接收子进程的输出结果。下面是一个示例代码:

import subprocess

# 执行一个命令并接收子进程的输出
p = subprocess.Popen(["ls", "-l"], stdout=subprocess.PIPE)
output, error = p.communicate()
print(output.decode("utf-8"))

# 向子进程发送数据并接收输出结果
p = subprocess.Popen(["grep", "example"], stdout=subprocess.PIPE, stdin=subprocess.PIPE)
input_data = "This is an example"
output, error = p.communicate(input=input_data.encode("utf-8"))
print(output.decode("utf-8"))

在上述代码中,我们首先创建一个子进程对象 p,执行命令 ls -l 并将结果输出到 output 中。接着,我们再次创建一个子进程对象 p,执行命令 grep example 并将 input_data

Selain kaedah di atas, kami juga boleh melaksanakan arahan Shell dengan menyatakan parameter shell=True semasa mencipta objek subproses. Kod sampel adalah seperti berikut:

rrreee
Dalam kod di atas, kami lulus perintah Shell "ls -l" sebagai parameter kepada pembina kelas Popen, dan lulus parameter shell=True untuk melaksanakan arahan Shell.

🎜2. Kawalan subproses🎜Selepas subproses berjaya dibuat, kita boleh menggunakan pelbagai kaedah objek subproses untuk mengawal tingkah laku subproses. Berikut ialah beberapa kaedah yang biasa digunakan: 🎜
  1. wait(): Tunggu sehingga proses anak tamat dan mengembalikan kod status.
  2. communicate(input=None): Berinteraksi dengan proses anak, anda boleh menghantar kandungan ke proses anak, dan anda juga boleh mendapatkan hasil output proses anak.
  3. poll(): Memeriksa sama ada proses anak tamat Jika ia tamat, ia mengembalikan kod status proses Jika ia tidak tamat, ia mengembalikan Tiada.
🎜Berikut ialah contoh kod yang mendapat hasil output dan mengeluarkannya apabila proses anak tamat: 🎜rrreee🎜Dalam kod di atas, kami menggunakan communicate() kaedah dengan proses anak Berinteraksi, dapatkan output proses anak dan tetapkan kepada pembolehubah output. Kemudian gunakan kaedah decode("utf-8") untuk menukar rentetan binari kepada rentetan berkod UTF-8 dan mencetak output. 🎜🎜3. Komunikasi sub-proses🎜Menggunakan kaedah communicate() boleh berkomunikasi dengan mudah dengan sub-proses itu bukan sahaja boleh menghantar data ke sub-proses, tetapi juga menerima hasil output daripada sub-proses tersebut. Berikut ialah contoh kod: 🎜rrreee🎜Dalam kod di atas, kami mula-mula mencipta objek sub-proses p, laksanakan arahan ls -l dan keluarkan hasilnya ke output. Seterusnya, kami mencipta objek subproses p sekali lagi, laksanakan perintah grep example dan hantar input_data ke subprocess. Akhirnya, kami mencetak hasilnya. 🎜🎜Ringkasan:🎜Dengan menggunakan modul subproses, kami boleh mencipta, mengawal dan berkomunikasi dengan subproses dengan mudah. Dalam proses pengaturcaraan sebenar, kita boleh menggunakan fungsi ini secara fleksibel mengikut keperluan khusus untuk mencapai operasi pengurusan sub-proses yang lebih kompleks. Saya harap artikel ini telah membantu anda untuk menggunakan modul subproses untuk pengurusan subproses dalam Python. 🎜

Atas ialah kandungan terperinci Cara menggunakan modul subproses untuk pengurusan subproses dalam Python 3.x. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn