Topik Kandungan:
- Jalankan Perintah Linux Mudah
- Jalankan Perintah dengan Data Input
- Jalankan Skrip Python
- Mengendalikan Ralat Subproses
- Kembalikan Kod Subproses.Popen
- Ubah hala Output Subproses ke Fail
- Multiprocessing Menggunakan Subprocess.Popen
- Mengendalikan Strim Input dan Output s
- Kawal Masa Tamat dan Kelewatan
- 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 modulimport 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:
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 modulimport 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':
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 diperlukanimport 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:
`
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 modulimport 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:
Output berikut muncul jika arahan 'usr' diambil sebagai input yang merupakan arahan yang sah:
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 modulimport 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:
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 importimport 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:
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 diperlukanimport 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:
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 modulimport 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:
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 subprosesimport 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:
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 importimport 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:
Kesimpulan
Penggunaan berbeza subproses Python.Popen() ditunjukkan dalam tutorial ini menggunakan berbilang skrip Python yang akan membantu pengguna Python mengetahui kegunaan asas fungsi ini.