Subproses Python. Contoh Popen

Subproses Python Contoh Popen



Subproses Python adalah salah satu modul berguna yang digunakan untuk menjalankan berbagai perintah shell, proses, dan mengeksekusi skrip lain atau file yang dapat dieksekusi menggunakan skrip Python. Hal ini dapat digunakan juga untuk mengarahkan data dari satu proses ke proses lain dan menangani kesalahan yang dihasilkan oleh proses anak. Modul subproses memiliki banyak kelas yang digunakan untuk berbagai tujuan. Kelas “subproses.Popen” adalah salah satu kelas dalam modul ini yang digunakan untuk berinteraksi dengan proses eksternal dan melakukan berbagai jenis tugas di antara proses. Berbagai penggunaan kelas “subprocess.Popen” dalam skrip Python ditampilkan dalam tutorial ini.

Topik Isi:

  1. Jalankan Perintah Linux Sederhana
  2. Jalankan Perintah dengan Input Data
  3. Jalankan Skrip Python
  4. Tangani Kesalahan Subproses
  5. Kembalikan Kode Subproses.Popen
  6. Arahkan Output Subproses ke File
  7. Multiproses Menggunakan Subproses.Popen
  8. Tangani Aliran Input dan Output S
  9. Kontrol Batas Waktu dan Penundaan
  10. Membaca Input Streaming

Jalankan Perintah Linux Sederhana

Perintah “tanggal” digunakan untuk menampilkan tanggal dan waktu sistem saat ini. Buat file Python dengan skrip berikut yang membuat subproses yang menjalankan perintah “date” dan mencetak output dari perintah ini:

#Impor modul

impor subproses

#Tentukan perintah untuk subproses dan

#buka proses dengan menggunakan fungsi Popen()

keluaran = subproses . terbuka ( [ 'tanggal' ] , stdout = subproses . PIPA )

#Ambil output dan kesalahan dengan berkomunikasi dengan proses

stdout , stderr = keluaran. menyampaikan ( )

#Cetak hasilnya

mencetak ( stdout. membaca sandi ( ) )

Keluaran:







Output berikut muncul setelah menjalankan skrip sebelumnya:



  hal1



Pergi ke atas





Jalankan Perintah dengan Input Data

Perintah “wc” dengan opsi “-c” digunakan untuk menghitung jumlah total karakter nilai string yang disediakan dengan perintah ini. Buat file Python dengan skrip berikut yang membuat subproses dengan fungsi Popen() untuk menjalankan perintah “wc –c”. Nilai string diambil dari terminal setelah menjalankan skrip dan total karakter string input dicetak di output.

#Impor modul

impor subproses

#Tentukan perintah untuk subproses dan

#Buka proses dengan menggunakan fungsi Popen()

keluaran = subproses . terbuka ( [ 'toilet' , '-C' ] , stdout = subproses . PIPA )

#Ambil output dan kesalahan dengan berkomunikasi dengan proses

stdout , stderr = keluaran. menyampaikan ( )

#Cetak hasilnya

mencetak ( stdout. membaca sandi ( ) )

Keluaran:



Output berikut muncul untuk nilai input “Contoh Subproses Python”:

Pergi ke atas

Jalankan Skrip Python

Buat file Python bernama “sum.py” dengan skrip berikut yang menghitung jumlah dua angka dan angka-angka ini disediakan sebagai argumen baris perintah:

jumlah.py

#Impor modul yang diperlukan

impor sy

#Hitung total argumen

N = hanya ( sy . argv )

#Tambahkan dua nilai argumen pertama

jumlah = ke dalam ( sy . argv [ 1 ] ) + ke dalam ( sy . argv [ 2 ] )

#Cetak hasil penjumlahan

mencetak ( 'Jumlah dari ' + sy . argv [ 1 ] + ' Dan ' + sy . argv [ 2 ] + ' adalah' , jumlah )

Buat Python mengajukan dengan skrip berikut yang akan menjalankan Python mengajukan bernama jumlah . py dengan dua argumen dengan membuat a subproses .

#Impor modul

impor subproses

#Jalankan skrip python di subproses dan

#buka proses dengan menggunakan fungsi Popen()

keluaran = subproses . terbuka ( [ 'piton3' , 'jumlah.py' , '25' , '55' ] , stdout = subproses . PIPA ) #Ambil output dan kesalahan dengan berkomunikasi dengan proses

stdout , stderr = keluaran. menyampaikan ( )

#Cetak hasilnya

mencetak ( stdout. membaca sandi ( ) )

Keluaran:

Output berikut muncul setelah menjalankan skrip sebelumnya:

Pergi ke atas

`

Tangani Kesalahan Subproses

Buat file Python dengan skrip berikut yang menangani kesalahan subproses menggunakan blok “coba-kecuali”. Sebuah perintah diambil dari pengguna dan dieksekusi oleh subproses. Pesan kesalahan ditampilkan jika ada perintah yang tidak valid diambil dari pengguna.

#Impor modul

impor subproses

impor sy

#Ambil perintah dari pengguna

memerintah = memasukkan ( 'Masukkan perintah yang valid:' )

mencoba :

#Buka proses dengan menggunakan fungsi Popen()

keluaran = subproses . terbuka ( [ memerintah ] , stdout = subproses . PIPA )

#Ambil output dan kesalahan dengan berkomunikasi dengan proses

stdout , stderr = keluaran. menyampaikan ( )

#Cetak hasilnya

mencetak ( stdout. membaca sandi ( ) )

kecuali :

mencetak ( 'Kesalahan:' , sy . exc_info ( ) )

Keluaran:

Output berikut muncul jika perintah “pwd” diambil sebagai input yang merupakan perintah yang valid:

  hal4-1

Output berikut muncul jika perintah “usr” diambil sebagai input yang merupakan perintah yang valid:

  hal4-2

Pergi ke atas

Kembalikan Kode Subproses.Popen

Buat file Python dengan skrip berikut yang menjalankan perintah “ls” melalui subproses untuk mendapatkan daftar semua file Python dari lokasi saat ini. Skrip menunggu untuk menyelesaikan subproses dan mencetak kode pengembalian.

#Impor modul

impor subproses

impor sy

#Atur perintahnya

memerintah = [ 'aku' , '-aku' , '*.py' ]

mencoba :

#Buka proses dengan menggunakan fungsi Popen()

keluaran = subproses . terbuka ( memerintah , stdout = subproses . PIPA ,

stderr = subproses . PIPA , teks = BENAR )

#Tunggu hingga prosesnya selesai

kode ulang = keluaran. Tunggu ( )

#Cetak kode pengembalian

mencetak ( 'Kode Pengembalian:' , kode ulang )

kecuali :

#Cetak pesan kesalahan untuk yang salah

mencetak ( 'Kesalahan:' , sy . exc_info ( ) )

Keluaran:

Output serupa muncul setelah menjalankan skrip sebelumnya:

Pergi ke atas

Arahkan Output Subproses ke File

Buat file Python dengan skrip berikut yang menulis output subproses dalam file teks. Perintah yang dijalankan oleh subproses diambil dari pengguna.

#Impor modul

impor subproses

#Tentukan nama file

nama file = 'file keluar.txt'

#Ambil perintah ping

cmd = memasukkan ( 'Masukkan perintah ping:' )

#Pisahkan masukan yang diambil berdasarkan spasi

argumen = cmd . membelah ( )

#Tulis keluaran perintah dalam file

dengan membuka ( nama file , 'Di dalam' ) sebagai data keluar:

proses = subproses . terbuka ( argumen , stdout = data keluar )

#Tunggu hingga proses selesai

kode_kembali = proses. Tunggu ( )

Keluaran:

Menurut output berikut, perintah “ping -c 3 www.google.com ” Perintah diambil dari pengguna dan perintah “cat” digunakan untuk menampilkan konten file yang ditulis oleh subproses:

Pergi ke atas

Multiproses Menggunakan Subproses.Popen

Buat file Python dengan skrip berikut di mana penggunaan multiprosesor ditampilkan menggunakan subproses. Di sini, fungsi bernama display_msg() dipanggil beberapa kali menggunakan multiprosesor.

#Impor modul yang diperlukan

impor multiproses

impor subproses

#Tentukan fungsi yang akan dipanggil dengan multiprosesing

def tampilan_pesan ( N ) :

#Tentukan perintah dengan fungsi format()

cmd = 'gema 'Pemrograman Python'' . format ( N )

#Buka proses dengan menggunakan fungsi Popen()

proses = subproses . terbuka ( cmd , kerang = BENAR , stdout = subproses . PIPA )

#Ambil output dan kesalahan dengan berkomunikasi dengan proses

stdout , kesalahan = proses. menyampaikan ( )

#Cetak hasilnya

mencetak ( stdout. membaca sandi ( ) )

#Panggil fungsi 5 kali dengan membuat multiprocessing.Pool

dengan multiproses. Kolam ( multiproses. cpu_count ( ) ) sebagai mp:

#Petakan fungsinya

mp. peta ( tampilan_pesan , jangkauan ( 1 , 5 ) )

Keluaran:

Output berikut muncul setelah menjalankan skrip sebelumnya:

Pergi ke atas

Tangani Aliran Input dan Output

Buat file teks bernama “test.txt” dengan konten berikut sebelum membuat skrip Python dari contoh ini.

tes.txt

PERL

ular piton

pesta

php

Buat file Python dengan skrip berikut yang menggunakan satu subproses untuk membaca konten file “test.txt” dan subproses lain untuk mencari kata tertentu dalam file teks tersebut. Di sini, kata “python” dicari di “file test.txt” yang berisi kata ini.

#Impor modul

impor subproses

#Tentukan proses untuk aliran input

dalam_proses = subproses . terbuka ( [ 'kucing' , 'tes.txt' ] , stdout = subproses . PIPA , teks = Benar > #Tentukan proses untuk aliran keluaran

keluar_proses = subproses . terbuka (

[ 'pegangan' , 'piton' ] , stdin = dalam_proses. stdout ,

stdout = subproses . PIPA , teks = BENAR )

#Simpan output dari proses input dan output

keluaran , _ = keluar_proses. menyampaikan ( )

#Cetak hasilnya

mencetak ( 'Keluaran:' , keluaran )

Keluaran:

Output berikut muncul setelah menjalankan skrip:

Pergi ke atas

Kontrol Subproses Menggunakan Timer

Buat file Python dengan skrip berikut yang menggunakan pengatur waktu untuk menjalankan perintah menggunakan subproses. Di sini, blok “coba-kecuali” digunakan untuk memulai pengatur waktu dan blok “akhirnya” digunakan untuk membatalkan pengatur waktu.

#Impor modul subproses

impor subproses

#Impor modul Timer

dari threading impor pengatur waktu

#Tentukan perintahnya

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

#Buka prosesnya

P = subproses . terbuka (

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

#Tentukan pengatur waktunya

pengatur waktu = pengatur waktu ( 2 , lambda proses: proses. membunuh ( ) , [ P ] )

mencoba :

#Mulai pengatur waktunya

pengatur waktu. awal ( )

#Baca keluaran

stdout , _ = P. menyampaikan ( )

#Cetak keluaran

mencetak ( stdout. membaca sandi ( ) )

kecuali :

#Cetak pesan kesalahan untuk yang salah

mencetak ( 'Kesalahan:' , sy . exc_info ( ) )

Akhirnya :

#Hentikan pengatur waktunya

pengatur waktu. membatalkan ( )

Keluaran:

Output berikut muncul setelah menjalankan skrip:

Pergi ke atas

Baca Masukan Streaming

Buat file Python yang membaca konten output subproses menggunakan loop 'sementara' dan menyimpan konten ke dalam variabel. Isi variabel ini dicetak nanti. Di sini, perintah “curl” digunakan dalam subproses untuk www.google.com URL.

#Impor modul

impor subproses

#Tentukan perintah

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

P = subproses . terbuka ( cmd , stdout = subproses . PIPA ,

stderr = subproses . PIPA , teks = BENAR >

#Inisialisasi variabel keluaran

keluaran = ''

ketika BENAR :

#Baca keluaran proses baris demi baris

dalam = P. stdout . garis baca ( )

#Hentikan dari loop ketika subproses selesai

jika bukan dalam:

merusak

keluaran = keluaran + ln

#Cetak garisnya

mencetak ( keluaran )

#Dapatkan kode pengembalian setelah menyelesaikan proses

kode_kembali = P. Tunggu ( )

#Cetak kode pengembalian

mencetak ( 'Kode pengembalian:' , kode_kembali )

Keluaran:

Bagian terakhir dari tiga keluaran ditunjukkan pada gambar berikut. Kode pengembalian setelah menyelesaikan subproses adalah 0:

Pergi ke atas

Kesimpulan

Penggunaan berbeda dari subproses Python.Popen() ditampilkan dalam tutorial ini menggunakan beberapa skrip Python yang akan membantu pengguna Python mengetahui penggunaan dasar fungsi ini.