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 命令。
二、子进程的控制
在子进程创建成功后,我们可以使用子进程对象的各种方法来控制子进程的行为。下面是一些常用的方法:
下面是一个示例代码,在子进程结束时获取输出结果并输出:
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
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.
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!