Python Subprocess.Popen Contoh

Python Subprocess Popen Contoh



Subproses Python ialah salah satu modul berguna yang digunakan untuk menjalankan perintah shell yang berbeza, proses dan melaksanakan skrip lain atau fail boleh laku menggunakan skrip Python. Ia juga boleh digunakan untuk mengubah hala data dari satu proses ke proses lain dan mengendalikan ralat yang dihasilkan oleh proses anak. Modul subproses mempunyai banyak kelas yang digunakan untuk pelbagai tujuan. Kelas 'subprocess.Popen' ialah salah satu daripada kelas modul ini yang digunakan untuk berinteraksi dengan proses luaran dan melaksanakan pelbagai jenis tugas di antara proses. Pelbagai kegunaan kelas 'subprocess.Popen' dalam skrip Python ditunjukkan dalam tutorial ini.

Topik Kandungan:

  1. Jalankan Perintah Linux Mudah
  2. Jalankan Perintah dengan Data Input
  3. Jalankan Skrip Python
  4. Mengendalikan Ralat Subproses
  5. Kembalikan Kod Subproses.Popen
  6. Ubah hala Output Subproses ke Fail
  7. Multiprocessing Menggunakan Subprocess.Popen
  8. Mengendalikan Strim Input dan Output s
  9. Kawal Masa Tamat dan Kelewatan
  10. Baca Input Penstriman

Jalankan Perintah Linux Mudah

Perintah 'tarikh' digunakan untuk memaparkan tarikh dan masa sistem semasa. Buat fail Python dengan skrip berikut yang mencipta subproses yang melaksanakan perintah 'tarikh' dan mencetak output arahan ini:

#Import modul

import subproses

#Tentukan arahan untuk subproses dan

#buka proses dengan menggunakan fungsi Popen().

pengeluaran = subproses . Popen ( [ 'Tarikh' ] , stdout = subproses . PAIP )

#Mendapatkan keluaran dan ralat dengan berkomunikasi dengan proses

stdout , stderr = pengeluaran. berkomunikasi ( )

#Cetak output

cetak ( stdout. nyahkod ( ) )

Pengeluaran:







Output berikut muncul selepas melaksanakan skrip sebelumnya:



  p1



Pergi ke atas





Jalankan Perintah dengan Data Input

Perintah 'wc' dengan pilihan '-c' digunakan untuk mengira jumlah bilangan aksara nilai rentetan yang disediakan dengan arahan ini. Cipta fail Python dengan skrip berikut yang mencipta subproses dengan fungsi Popen() untuk menjalankan arahan “wc –c”. Nilai rentetan diambil dari terminal selepas melaksanakan skrip dan jumlah aksara rentetan input dicetak dalam output.

#Import modul

import subproses

#Tentukan arahan untuk subproses dan

#Buka proses dengan menggunakan fungsi Popen().

pengeluaran = subproses . Popen ( [ 'wc' , '-c' ] , stdout = subproses . PAIP )

#Mengambil keluaran dan ralat dengan berkomunikasi dengan proses

stdout , stderr = pengeluaran. berkomunikasi ( )

#Cetak output

cetak ( stdout. nyahkod ( ) )

Pengeluaran:



Output berikut muncul untuk nilai input 'Contoh Subproses Python':

Pergi ke atas

Jalankan Skrip Python

Buat fail Python bernama 'sum.py' dengan skrip berikut yang mengira jumlah dua nombor dan nombor ini disediakan sebagai argumen baris arahan:

sum.py

#Import modul yang diperlukan

import sys

#Kira jumlah hujah

n = sahaja ( sys . argv )

#Tambahkan dua nilai argumen pertama

jumlah = int ( sys . argv [ 1 ] ) + int ( sys . argv [ 2 ] )

#Cetak hasil penambahan

cetak ( 'Jumlah daripada' + sys . argv [ 1 ] + 'dan' + sys . argv [ 2 ] + 'adalah' , jumlah )

Buat Python fail dengan skrip berikut yang akan menjalankan Python fail bernama jumlah . py dengan dua hujah dengan mencipta a subproses .

#Import modul

import subproses

#Jalankan skrip python dalam subproses dan

#buka proses dengan menggunakan fungsi Popen().

pengeluaran = subproses . Popen ( [ 'python3' , 'sum.py' , '25' , '55' ] , stdout = subproses . PAIP ) #Mendapatkan keluaran dan ralat dengan berkomunikasi dengan proses

stdout , stderr = pengeluaran. berkomunikasi ( )

#Cetak output

cetak ( stdout. nyahkod ( ) )

Pengeluaran:

Output berikut muncul selepas melaksanakan skrip sebelumnya:

Pergi ke atas

`

Mengendalikan Ralat Subproses

Cipta fail Python dengan skrip berikut yang mengendalikan ralat subproses menggunakan blok 'cuba kecuali'. Perintah diambil daripada pengguna dan ia dilaksanakan oleh subproses. Mesej ralat dipaparkan jika sebarang arahan yang tidak sah diambil daripada pengguna.

#Import modul

import subproses

import sys

#Ambil arahan daripada pengguna

perintah = input ( 'Masukkan perintah yang sah:' )

cubalah :

#Buka proses dengan menggunakan fungsi Popen().

pengeluaran = subproses . Popen ( [ perintah ] , stdout = subproses . PAIP )

#Mendapatkan keluaran dan ralat dengan berkomunikasi dengan proses

stdout , stderr = pengeluaran. berkomunikasi ( )

#Cetak output

cetak ( stdout. nyahkod ( ) )

kecuali :

cetak ( 'Ralat:' , sys . exc_info ( ) )

Pengeluaran:

Output berikut muncul jika arahan 'pwd' diambil sebagai input yang merupakan arahan yang sah:

  p4-1

Output berikut muncul jika arahan 'usr' diambil sebagai input yang merupakan arahan yang sah:

  p4-2

Pergi ke atas

Kembalikan Kod Subproses.Popen

Cipta fail Python dengan skrip berikut yang melaksanakan perintah 'ls' melalui subproses untuk mendapatkan senarai semua fail Python dari lokasi semasa. Skrip menunggu untuk melengkapkan subproses dan mencetak kod pulangan.

#Import modul

import subproses

import sys

#Tetapkan arahan

perintah = [ 'ls' , '-l' , '*.py' ]

cubalah :

#Buka proses dengan menggunakan fungsi Popen().

pengeluaran = subproses . Popen ( perintah , stdout = subproses . PAIP ,

stderr = subproses . PAIP , teks = betul )

#Tunggu untuk menyelesaikan proses

retCode = pengeluaran. tunggu ( )

#Cetak kod pemulangan

cetak ( 'Kod Pemulangan:' , retCode )

kecuali :

#Cetak mesej ralat untuk yang salah

cetak ( 'Ralat:' , sys . exc_info ( ) )

Pengeluaran:

Output yang serupa muncul selepas melaksanakan skrip sebelumnya:

Pergi ke atas

Ubah hala Output Subproses ke Fail

Buat fail Python dengan skrip berikut yang menulis output subproses dalam fail teks. Perintah yang dilaksanakan oleh subproses diambil daripada pengguna.

#Modul import

import subproses

#Tentukan nama fail

nama fail = 'outfile.txt'

#Ambil arahan ping

cmd = input ( 'Masukkan arahan ping:' )

#Pisah input yang diambil berdasarkan ruang

args = cmd . berpecah ( )

#Tulis output arahan dalam fail

dengan buka ( nama fail , 'Dalam' ) sebagai data keluar:

proses = subproses . Popen ( args , stdout = keluar data )

#Tunggu untuk menyelesaikan proses

return_code = proses. tunggu ( )

Pengeluaran:

Mengikut output berikut, 'ping -c 3 www.google.com Perintah ” diambil daripada pengguna dan arahan “cat” digunakan untuk memaparkan kandungan fail yang ditulis oleh subproses:

Pergi ke atas

Multiprocessing Menggunakan Subprocess.Popen

Cipta fail Python dengan skrip berikut di mana penggunaan multiprocessing ditunjukkan menggunakan subprocess. Di sini, fungsi bernama display_msg() dipanggil beberapa kali menggunakan multiprocessing.

#Import modul yang diperlukan

import pelbagai pemprosesan

import subproses

#Tentukan fungsi yang akan dipanggil oleh multiprocessing

def paparan_msg ( n ) :

#Tentukan arahan dengan fungsi format().

cmd = 'gema 'Pengaturcaraan Python'' . format ( n )

#Buka proses dengan menggunakan fungsi Popen().

proses = subproses . Popen ( cmd , cangkerang = betul , stdout = subproses . PAIP )

#Mendapatkan keluaran dan ralat dengan berkomunikasi dengan proses

stdout , ralat = proses. berkomunikasi ( )

#Cetak output

cetak ( stdout. nyahkod ( ) )

#Panggil fungsi 5 kali dengan mencipta multiprocessing.Pool

dengan pelbagai pemprosesan. Kolam ( pelbagai pemprosesan. cpu_count ( ) ) sebagai mp:

#Peta fungsi

mp. peta ( paparan_msg , julat ( 1 , 5 ) )

Pengeluaran:

Output berikut muncul selepas melaksanakan skrip sebelumnya:

Pergi ke atas

Mengendalikan Strim Input dan Output

Cipta fail teks bernama 'test.txt' dengan kandungan berikut sebelum mencipta skrip Python bagi contoh ini.

test.txt

PERL

ular sawa

bash

php

Cipta fail Python dengan skrip berikut yang menggunakan satu subproses untuk membaca kandungan fail 'test.txt' dan subproses lain untuk mencari perkataan tertentu dalam fail teks tersebut. Di sini, perkataan 'python' dicari dalam 'fail test.txt' yang mengandungi perkataan ini.

#Import modul

import subproses

#Tentukan proses untuk aliran input

dalam proses = subproses . Popen ( [ 'kucing' , 'test.txt' ] , stdout = subproses . PAIP , teks = Tru > #Tentukan proses untuk aliran keluaran

proses_luar = subproses . Popen (

[ 'cengkaman' , 'python' ] , stdin = dalam proses. stdout ,

stdout = subproses . PAIP , teks = betul )

#Simpan output proses input dan output

pengeluaran , _ = proses_luar. berkomunikasi ( )

#Cetak output

cetak ( 'Pengeluaran:' , pengeluaran )

Pengeluaran:

Output berikut muncul selepas melaksanakan skrip:

Pergi ke atas

Kawal Subproses Menggunakan Pemasa

Cipta fail Python dengan skrip berikut yang menggunakan pemasa untuk melaksanakan arahan menggunakan subproses. Di sini, blok 'cuba kecuali' digunakan untuk memulakan pemasa dan blok 'akhirnya' digunakan untuk membatalkan pemasa.

#Import modul subproses

import subproses

#Import modul Pemasa

daripada benang import Pemasa

#Tentukan arahan

cmd = [ 'ping' , 'www.example.com' ]

#Buka proses

hlm = subproses . Popen (

cmd , stdout = subproses . PAIP , stderr = subproses . PAIP )

#Tentukan pemasa

pemasa = Pemasa ( 2 , lambda proses: proses. bunuh ( ) , [ hlm ] )

cubalah :

#Mulakan pemasa

pemasa. mulakan ( )

#Baca output

stdout , _ = hlm. berkomunikasi ( )

#Cetak output

cetak ( stdout. nyahkod ( ) )

kecuali :

#Cetak mesej ralat untuk yang salah

cetak ( 'Ralat:' , sys . exc_info ( ) )

akhirnya :

#Hentikan pemasa

pemasa. batalkan ( )

Pengeluaran:

Output berikut muncul selepas melaksanakan skrip:

Pergi ke atas

Baca Input Penstriman

Buat fail Python yang membaca kandungan output subproses menggunakan gelung 'semasa' dan simpan kandungan ke dalam pembolehubah. Kandungan pembolehubah ini dicetak kemudian. Di sini, arahan 'curl' digunakan dalam subproses untuk www.google.com URL.

#Modul import

import subproses

#Tentukan arahan

cmd = [ 'keriting' , 'www.example.com' ]

hlm = subproses . Popen ( cmd , stdout = subproses . PAIP ,

stderr = subproses . PAIP , teks = betul >

#Memulakan pembolehubah output

pengeluaran = ''

sementara betul :

#Baca output proses baris demi baris

ln = hlm. stdout . talian baca ( )

#Tamatkan daripada gelung apabila subproses selesai

jika bukan ln:

rehat

pengeluaran = keluaran + ln

#Cetak garisan

cetak ( pengeluaran )

#Dapatkan kod pulangan selepas selesai proses

return_code = hlm. tunggu ( )

#Cetak kod pemulangan

cetak ( 'Kod pulangan: ' , return_code )

Pengeluaran:

Bahagian terakhir daripada tiga output ditunjukkan dalam imej berikut. Kod pulangan selepas melengkapkan subproses ialah 0:

Pergi ke atas

Kesimpulan

Penggunaan berbeza subproses Python.Popen() ditunjukkan dalam tutorial ini menggunakan berbilang skrip Python yang akan membantu pengguna Python mengetahui kegunaan asas fungsi ini.