Python Alt İşlemi.Popen Örnekleri

Python Alt Islemi Popen Ornekleri



Python alt işlemi, farklı kabuk komutlarını, işlemlerini çalıştırmak ve Python betiğini kullanarak başka bir betiği veya yürütülebilir dosyaları yürütmek için kullanılan kullanışlı modüllerden biridir. Verileri bir süreçten diğerine yönlendirmek ve alt süreçler tarafından oluşturulan hataları ele almak için de kullanılabilir. Alt süreç modülünde çeşitli amaçlar için kullanılan birçok sınıf bulunur. “subprocess.Popen” sınıfı, bu modülün dış süreçlerle etkileşimde bulunmak ve süreçler arasında farklı türde görevleri gerçekleştirmek için kullanılan sınıflarından biridir. Bu eğitimde Python betiğinde “subprocess.Popen” sınıfının birden çok kullanımı gösterilmektedir.

İçeriğin Konusu:

  1. Basit Bir Linux Komutunu Çalıştırın
  2. Giriş Verileriyle Bir Komut Çalıştırma
  3. Python Komut Dosyasını Çalıştırın
  4. Alt İşlem Hatasını Yönetme
  5. Subprocess.Popen Kodunu Döndürün
  6. Alt İşlemin Çıktısını Dosyaya Yönlendir
  7. Subprocess.Popen Kullanarak Çoklu İşleme
  8. Giriş ve Çıkış Akışını Yönetme S
  9. Zaman Aşımını ve Gecikmeyi Kontrol Edin
  10. Akış Girişini Oku

Basit Bir Linux Komutunu Çalıştırın

“Tarih” komutu mevcut sistem tarihini ve saatini görüntülemek için kullanılır. 'Tarih' komutunu yürüten bir alt işlem oluşturan aşağıdaki komut dosyasıyla bir Python dosyası oluşturun ve bu komutun çıktısını yazdırın:

#Modülü içe aktar

içe aktarmak alt süreç

#Alt süreç için bir komut tanımlayın ve

#open işlemi Popen() işlevini kullanarak

çıktı = alt süreç . Popen ( [ 'tarih' ] , stdout = alt süreç . BORU )

#Süreçle iletişim kurarak çıktıyı ve hatayı alın

stdout , stderr = çıktı. iletişim ( )

#Çıktıyı yazdır

Yazdır ( stdout. şifreyi çözmek ( ) )

Çıktı:







Önceki betiği çalıştırdıktan sonra aşağıdaki çıktı görünür:



  p1



Başa gitmek





Giriş Verileriyle Bir Komut Çalıştırma

“-c” seçeneği bulunan “wc” komutu, bu komutla sağlanan string değerinin toplam karakter sayısını saymak için kullanılır. “wc –c” komutlarını çalıştırmak için Popen() işleviyle bir alt süreç oluşturan aşağıdaki komut dosyasıyla bir Python dosyası oluşturun. Betik çalıştırıldıktan sonra dize değeri terminalden alınır ve giriş dizesinin toplam karakterleri çıktıda yazdırılır.

#Modülü içe aktar

içe aktarmak alt süreç

#Alt süreç için bir komut tanımlayın ve

#Popen() işlevini kullanarak işlemi açın

çıktı = alt süreç . Popen ( [ 'WC' , '-C' ] , stdout = alt süreç . BORU )

#Süreçle iletişim kurarak çıktıyı ve hatayı alın

stdout , stderr = çıktı. iletişim ( )

#Çıktıyı yazdır

Yazdır ( stdout. şifreyi çözmek ( ) )

Çıktı:



“Python Alt İşlem Örnekleri” giriş değeri için aşağıdaki çıktı görünür:

Başa gitmek

Python Komut Dosyasını Çalıştırın

İki sayının toplamını hesaplayan aşağıdaki komut dosyasıyla 'sum.py' adında bir Python dosyası oluşturun ve bu sayılar komut satırı argümanları olarak sağlanır:

toplam.py

#Gerekli modülü içe aktar

içe aktarmak sistem

#Toplam argümanları say

N = sadece ( sistem . argv )

#İlk iki bağımsız değişken değerini ekleyin

toplam = int ( sistem . argv [ 1 ] ) + int ( sistem . argv [ 2 ] )

#Toplama sonucunu yazdır

Yazdır ( 'Toplamı ' + sistem . argv [ 1 ] + ' Ve ' + sistem . argv [ 2 ] + ' dır-dir' , toplam )

Bir Python oluşturun dosya ile Python'u çalıştıracak aşağıdaki komut dosyası dosya adlandırılmış toplam . py ile bir argüman oluşturarak iki argüman alt süreç .

#Modülü içe aktar

içe aktarmak alt süreç

#Alt süreçte python betiğini çalıştır ve

#Popen() işlevini kullanarak işlemi açın

çıktı = alt süreç . Popen ( [ 'python3' , 'toplam.py' , '25' , '55' ] , stdout = alt süreç . BORU ) #Süreçle iletişim kurarak çıktıyı ve hatayı alın

stdout , stderr = çıktı. iletişim ( )

#Çıktıyı yazdır

Yazdır ( stdout. şifreyi çözmek ( ) )

Çıktı:

Önceki betiği çalıştırdıktan sonra aşağıdaki çıktı görünür:

Başa gitmek

'

Alt İşlem Hatasını Yönetme

'try-hariç' bloğunu kullanarak alt işlemin hatalarını işleyen aşağıdaki komut dosyasıyla bir Python dosyası oluşturun. Kullanıcıdan bir komut alınır ve alt süreç tarafından yürütülür. Kullanıcıdan geçersiz bir komut alındığında hata mesajı görüntülenir.

#Modülleri içe aktar

içe aktarmak alt süreç

içe aktarmak sistem

#Kullanıcıdan komut al

emretmek = giriş ( 'Geçerli bir komut girin: ' )

denemek :

#Popen() işlevini kullanarak işlemi açın

çıktı = alt süreç . Popen ( [ emretmek ] , stdout = alt süreç . BORU )

#Süreçle iletişim kurarak çıktıyı ve hatayı alın

stdout , stderr = çıktı. iletişim ( )

#Çıktıyı yazdır

Yazdır ( stdout. şifreyi çözmek ( ) )

hariç :

Yazdır ( 'Hata:' , sistem . exc_info ( ) )

Çıktı:

Geçerli bir komut olan “pwd” komutu girdi olarak alınırsa aşağıdaki çıktı ortaya çıkar:

  s4-1

Geçerli bir komut olan “usr” komutu girdi olarak alınırsa aşağıdaki çıktı ortaya çıkar:

  s4-2

Başa gitmek

Subprocess.Popen Kodunu Döndürün

Geçerli konumdaki tüm Python dosyalarının listesini almak için alt işlem aracılığıyla bir 'ls' komutunu çalıştıran aşağıdaki komut dosyasıyla bir Python dosyası oluşturun. Betik alt işlemi tamamlamayı bekler ve dönüş kodunu yazdırır.

#Modülleri içe aktar

içe aktarmak alt süreç

içe aktarmak sistem

#Komutu ayarla

emretmek = [ 'I' , '-ben' , '*.py' ]

denemek :

#Popen() işlevini kullanarak işlemi açın

çıktı = alt süreç . Popen ( emretmek , stdout = alt süreç . BORU ,

stderr = alt süreç . BORU , metin = Doğru )

#İşlemin tamamlanmasını bekleyin

retKodu = çıktı. Beklemek ( )

#Dönüş kodunu yazdır

Yazdır ( 'Dönüş kodu:' , retKodu )

hariç :

#Yanlış hata mesajı yazdır

Yazdır ( 'Hata:' , sistem . exc_info ( ) )

Çıktı:

Önceki betiği çalıştırdıktan sonra benzer bir çıktı belirir:

Başa gitmek

Alt İşlemin Çıktısını Dosyaya Yönlendir

Alt işlemin çıktısını bir metin dosyasına yazan aşağıdaki komut dosyasıyla bir Python dosyası oluşturun. Alt süreç tarafından yürütülen komut kullanıcıdan alınır.

#İçe aktarma modülü

içe aktarmak alt süreç

#Dosya adını tanımla

dosya adı = 'çıkış dosyası.txt'

#Ping komutunu al

cmd = giriş ( 'Bir ping komutu girin: ' )

#Alınan girişi alana göre böl

argümanlar = cmd . bölmek ( )

#Komut çıktısını dosyaya yaz

ile açık ( dosya adı , 'İçinde' ) gibi eski veri:

işlem = alt süreç . Popen ( argümanlar , stdout = eski veri )

#İşlemin tamamlanmasını bekleyin

dönüş kodu = işlem. Beklemek ( )

Çıktı:

Aşağıdaki çıktıya göre “ping -c 3 www.google.com ” komutu kullanıcıdan alınır ve alt süreç tarafından yazılan dosyanın içeriğini görüntülemek için “cat” komutu kullanılır:

Başa gitmek

Subprocess.Popen Kullanarak Çoklu İşleme

Aşağıdaki komut dosyasıyla, çoklu işlem kullanımının alt işlem kullanılarak gösterildiği bir Python dosyası oluşturun. Burada display_msg() adlı bir işlev, çoklu işlem kullanılarak birden çok kez çağrılır.

#Gerekli modülleri içe aktar

içe aktarmak çoklu işlem

içe aktarmak alt süreç

#Çoklu işlem tarafından çağrılacak işlevi tanımlayın

kesinlikle display_msg ( N ) :

#Komutu format() işleviyle tanımlayın

cmd = 'echo 'Python Programlama'' . biçim ( N )

#Popen() işlevini kullanarak işlemi açın

işlem = alt süreç . Popen ( cmd , kabuk = Doğru , stdout = alt süreç . BORU )

#Süreçle iletişim kurarak çıktıyı ve hatayı alın

stdout , hata = işlem. iletişim ( )

#Çıktıyı yazdır

Yazdır ( stdout. şifreyi çözmek ( ) )

#Çoklu işleme havuzunu oluşturarak işlevi 5 kez çağırın.

ile çoklu işlem. Havuz ( çoklu işlem. cpu_count ( ) ) gibi mp:

#Fonksiyonu eşle

mp. harita ( display_msg , menzil ( 1 , 5 ) )

Çıktı:

Önceki betiği çalıştırdıktan sonra aşağıdaki çıktı görünür:

Başa gitmek

Giriş ve Çıkış Akışlarını Yönetme

Bu örneğin Python betiğini oluşturmadan önce aşağıdaki içeriğe sahip “test.txt” adında bir metin dosyası oluşturun.

test.txt

PERL

piton

darbe

php

Aşağıdaki komut dosyasıyla, 'test.txt' dosyasının içeriğini okumak için bir alt işlem ve o metin dosyasında belirli bir kelimeyi aramak için başka bir alt işlem kullanan bir Python dosyası oluşturun. Burada bu kelimenin yer aldığı “test.txt dosyası” içerisinde “python” kelimesi aranmaktadır.

#Modülleri içe aktar

içe aktarmak alt süreç

#Giriş akışı için bir süreç tanımlayın

süreç içi = alt süreç . Popen ( [ 'kedi' , 'test.txt' ] , stdout = alt süreç . BORU , metin = Tru > #Çıktı akışı için bir süreç tanımlayın

out_process = alt süreç . Popen (

[ 'kavramak' , 'piton' ] , standart = in_process. stdout ,

stdout = alt süreç . BORU , metin = Doğru )

#Giriş ve çıkış işlemlerinin çıktısını saklayın

çıktı , _ = out_process.out_process. iletişim ( )

#Çıktıyı yazdır

Yazdır ( 'Çıktı:' , çıktı )

Çıktı:

Betiği çalıştırdıktan sonra aşağıdaki çıktı görünür:

Başa gitmek

Bir Zamanlayıcı Kullanarak Alt Süreci Kontrol Etme

Bir alt işlemi kullanarak bir komutu yürütmek için bir zamanlayıcı kullanan, aşağıdaki komut dosyasıyla bir Python dosyası oluşturun. Burada “try-hariç” bloğu zamanlayıcıyı başlatmak için, “finally” bloğu ise zamanlayıcıyı iptal etmek için kullanılır.

#Alt işlem modülünü içe aktar

içe aktarmak alt süreç

#Zamanlayıcı modülünü içe aktar

itibaren iplik geçirme içe aktarmak Zamanlayıcı

#Komutu tanımla

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

#İşlemi aç

P = alt süreç . Popen (

cmd , stdout = alt süreç . BORU , stderr = alt süreç . BORU )

#Zamanlayıcıyı tanımla

zamanlayıcı = Zamanlayıcı ( 2 , lambda süreç: süreç. öldürmek ( ) , [ P ] )

denemek :

#Zamanlayıcıyı başlat

zamanlayıcı. başlangıç ( )

#Çıktıyı oku

stdout , _ = P. iletişim ( )

#Çıktıyı yazdır

Yazdır ( stdout. şifreyi çözmek ( ) )

hariç :

#Yanlış hata mesajı yazdır

Yazdır ( 'Hata:' , sistem . exc_info ( ) )

Sonunda :

#Zamanlayıcıyı durdur

zamanlayıcı. iptal etmek ( )

Çıktı:

Betiği çalıştırdıktan sonra aşağıdaki çıktı görünür:

Başa gitmek

Akış Girişini Okuyun

Bir 'while' döngüsü kullanarak alt işlem çıktısının içeriğini okuyan ve içeriği bir değişkene depolayan bir Python dosyası oluşturun. Bu değişkenin içeriği daha sonra yazdırılır. Burada alt işlemde “curl” komutu kullanılmaktadır. www.google.com URL'si.

#İçe aktarma modülü

içe aktarmak alt süreç

#Komutu tanımla

cmd = [ 'kıvrılma' , 'www.example.com' ]

P = alt süreç . Popen ( cmd , stdout = alt süreç . BORU ,

stderr = alt süreç . BORU , metin = Doğru >

#Çıkış değişkenini başlat

çıktı = ''

sırasında Doğru :

#İşlem çıktısını satır satır oku

içinde = P. stdout . okuma satırı ( )

#Alt işlem bittiğinde döngüden çık

eğer Olumsuz :

kırmak

çıktı = çıkış + ln

#Satırı yazdır

Yazdır ( çıktı )

#İşlemi bitirdikten sonra dönüş kodunu alın

dönüş kodu = P. Beklemek ( )

#Dönüş kodunu yazdır

Yazdır ( 'Dönüş kodu: ' , dönüş kodu )

Çıktı:

Üç çıkışın son kısmı aşağıdaki resimde gösterilmektedir. Alt işlemi tamamladıktan sonraki dönüş kodu 0'dır:

Başa gitmek

Çözüm

Python subprocess.Popen()'ın farklı kullanımları, bu eğitimde Python kullanıcılarının bu fonksiyonun temel kullanımlarını bilmelerine yardımcı olacak birden fazla Python betiği kullanılarak gösterilmektedir.