Python Subprocess.Popen Examples

Python Subprocess Popen Examples



Η υποδιεργασία Python είναι μία από τις χρήσιμες ενότητες που χρησιμοποιείται για την εκτέλεση διαφορετικών εντολών φλοιού, διεργασιών και εκτέλεσης άλλου σεναρίου ή εκτελέσιμων αρχείων χρησιμοποιώντας το σενάριο Python. Μπορεί επίσης να χρησιμοποιηθεί για την ανακατεύθυνση των δεδομένων από μια διεργασία σε μια άλλη διεργασία και τον χειρισμό των σφαλμάτων που δημιουργούνται από τις θυγατρικές διεργασίες. Η ενότητα υποδιεργασίας έχει πολλές κλάσεις που χρησιμοποιούνται για διάφορους σκοπούς. Η κλάση 'subprocess.Popen' είναι μία από τις κλάσεις αυτής της ενότητας που χρησιμοποιείται για την αλληλεπίδραση με τις εξωτερικές διεργασίες και την εκτέλεση διαφορετικών τύπων εργασιών μεταξύ των διεργασιών. Πολλαπλές χρήσεις της κλάσης 'subprocess.Popen' στο σενάριο Python εμφανίζονται σε αυτό το σεμινάριο.

Θέμα Περιεχομένων:

  1. Εκτελέστε μια απλή εντολή Linux
  2. Εκτελέστε μια εντολή με δεδομένα εισόδου
  3. Εκτελέστε ένα σενάριο Python
  4. Χειριστείτε το σφάλμα υποδιεργασίας
  5. Επιστρέψτε τον Κώδικα Υποδιεργασίας. Ανοίξτε
  6. Ανακατευθύνετε την έξοδο της υποδιεργασίας στο αρχείο
  7. Multiprocessing Using Subprocess.Popen
  8. Χειριστείτε τη ροή εισόδου και εξόδου μικρό
  9. Ελέγξτε το Timeout και την καθυστέρηση
  10. Διαβάστε μια είσοδο ροής

Εκτελέστε μια απλή εντολή Linux

Η εντολή 'ημερομηνία' χρησιμοποιείται για την εμφάνιση της τρέχουσας ημερομηνίας και ώρας του συστήματος. Δημιουργήστε ένα αρχείο Python με το ακόλουθο σενάριο που δημιουργεί μια υποδιεργασία που εκτελεί την εντολή 'date' και εκτυπώστε την έξοδο αυτής της εντολής:

#Εισαγωγή της ενότητας

εισαγωγή υποδιεργασία

#Ορίστε μια εντολή για την υποδιεργασία και

#open διεργασία χρησιμοποιώντας τη συνάρτηση Popen().

παραγωγή = υποδιεργασία . Popen ( [ 'ημερομηνία' ] , stdout = υποδιεργασία . ΣΩΛΗΝΑΣ )

#Ανακτήστε την έξοδο και το σφάλμα επικοινωνώντας με τη διαδικασία

stdout , stderr = παραγωγή. ΕΠΙΚΟΙΝΩΝΩ ( )

#Εκτυπώστε το αποτέλεσμα

Τυπώνω ( stdout. αποκρυπτογραφώ ( ) )

Παραγωγή:







Η ακόλουθη έξοδος εμφανίζεται μετά την εκτέλεση του προηγούμενου σεναρίου:



  p1



Πήγαινε στην κορυφή





Εκτελέστε μια εντολή με δεδομένα εισόδου

Η εντολή 'wc' με την επιλογή '-c' χρησιμοποιείται για την καταμέτρηση του συνολικού αριθμού χαρακτήρων της τιμής συμβολοσειράς που παρέχεται με αυτήν την εντολή. Δημιουργήστε ένα αρχείο Python με το ακόλουθο σενάριο που δημιουργεί μια υποδιεργασία με τη συνάρτηση Popen() για την εκτέλεση των εντολών «wc –c». Η τιμή συμβολοσειράς λαμβάνεται από το τερματικό μετά την εκτέλεση του σεναρίου και οι συνολικοί χαρακτήρες της συμβολοσειράς εισόδου εκτυπώνονται στην έξοδο.

#Εισαγωγή της ενότητας

εισαγωγή υποδιεργασία

#Ορίστε μια εντολή για την υποδιεργασία και

#Ανοίξτε τη διαδικασία χρησιμοποιώντας τη συνάρτηση Popen().

παραγωγή = υποδιεργασία . Popen ( [ 'τουαλέτα' , '-ντο' ] , stdout = υποδιεργασία . ΣΩΛΗΝΑΣ )

#Ανακτήστε την έξοδο και το σφάλμα επικοινωνώντας με τη διαδικασία

stdout , stderr = παραγωγή. ΕΠΙΚΟΙΝΩΝΩ ( )

#Εκτυπώστε το αποτέλεσμα

Τυπώνω ( stdout. αποκρυπτογραφώ ( ) )

Παραγωγή:



Η ακόλουθη έξοδος εμφανίζεται για την τιμή εισόδου «Python Subprocess Examples»:

Πήγαινε στην κορυφή

Εκτελέστε ένα σενάριο Python

Δημιουργήστε ένα αρχείο Python με το όνομα 'sum.py' με το ακόλουθο σενάριο που υπολογίζει το άθροισμα δύο αριθμών και αυτοί οι αριθμοί παρέχονται ως ορίσματα της γραμμής εντολών:

sum.py

#Εισαγωγή απαραίτητης ενότητας

εισαγωγή sys

#Μετρήστε τα συνολικά επιχειρήματα

n = μόνο ( sys . argv )

#Προσθέστε τις δύο πρώτες τιμές ορίσματος

άθροισμα = ενθ ( sys . argv [ 1 ] ) + ενθ ( sys . argv [ 2 ] )

#Εκτυπώστε το αποτέλεσμα προσθήκης

Τυπώνω ( 'Το άθροισμα του ' + sys . argv [ 1 ] + ' και ' + sys . argv [ 2 ] + ' είναι' , άθροισμα )

Δημιουργήστε μια Python αρχείο με το παρακάτω σενάριο που θα εκτελέσει μια Python αρχείο ονομάστηκε άθροισμα . py με δύο ορίσματα δημιουργώντας ένα υποδιεργασία .

#Εισαγωγή της ενότητας

εισαγωγή υποδιεργασία

#Εκτέλεση σεναρίου python στην υποδιεργασία και

#ανοίξτε τη διαδικασία χρησιμοποιώντας τη συνάρτηση Popen().

παραγωγή = υποδιεργασία . Popen ( [ 'python3' , 'sum.py' , '25' , '55' ] , stdout = υποδιεργασία . ΣΩΛΗΝΑΣ ) #Ανακτήστε την έξοδο και το σφάλμα επικοινωνώντας με τη διαδικασία

stdout , stderr = παραγωγή. ΕΠΙΚΟΙΝΩΝΩ ( )

#Εκτυπώστε το αποτέλεσμα

Τυπώνω ( stdout. αποκρυπτογραφώ ( ) )

Παραγωγή:

Η ακόλουθη έξοδος εμφανίζεται μετά την εκτέλεση του προηγούμενου σεναρίου:

Πήγαινε στην κορυφή

`

Χειριστείτε το σφάλμα υποδιεργασίας

Δημιουργήστε ένα αρχείο Python με το ακόλουθο σενάριο που χειρίζεται τα σφάλματα της υποδιεργασίας χρησιμοποιώντας το μπλοκ 'try-except'. Λαμβάνεται μια εντολή από τον χρήστη και εκτελείται από την υποδιεργασία. Το μήνυμα σφάλματος εμφανίζεται εάν ληφθεί κάποια μη έγκυρη εντολή από τον χρήστη.

#Εισαγωγή των μονάδων

εισαγωγή υποδιεργασία

εισαγωγή sys

#Λάβετε εντολή από τον χρήστη

εντολή = εισαγωγή ( 'Εισαγάγετε μια έγκυρη εντολή:' )

δοκιμάστε :

#Ανοίξτε τη διαδικασία χρησιμοποιώντας τη συνάρτηση Popen().

παραγωγή = υποδιεργασία . Popen ( [ εντολή ] , stdout = υποδιεργασία . ΣΩΛΗΝΑΣ )

#Ανακτήστε την έξοδο και το σφάλμα επικοινωνώντας με τη διαδικασία

stdout , stderr = παραγωγή. ΕΠΙΚΟΙΝΩΝΩ ( )

#Εκτυπώστε το αποτέλεσμα

Τυπώνω ( stdout. αποκρυπτογραφώ ( ) )

εκτός :

Τυπώνω ( 'Λάθος:' , sys . exc_info ( ) )

Παραγωγή:

Η ακόλουθη έξοδος εμφανίζεται εάν η εντολή 'pwd' ληφθεί ως είσοδος που είναι έγκυρη εντολή:

  p4-1

Η ακόλουθη έξοδος εμφανίζεται εάν η εντολή 'usr' ληφθεί ως είσοδος που είναι έγκυρη εντολή:

  p4-2

Πήγαινε στην κορυφή

Επιστρέψτε τον Κώδικα Υποδιεργασίας. Ανοίξτε

Δημιουργήστε ένα αρχείο Python με το ακόλουθο σενάριο που εκτελεί μια εντολή 'ls' μέσω της υποδιεργασίας για να λάβετε τη λίστα όλων των αρχείων Python από την τρέχουσα θέση. Το σενάριο περιμένει να ολοκληρώσει την υποδιεργασία και εκτυπώνει τον κωδικό επιστροφής.

#Εισαγωγή των μονάδων

εισαγωγή υποδιεργασία

εισαγωγή sys

#Ρυθμίστε την εντολή

εντολή = [ 'ls' , '-μεγάλο' , '*.py' ]

δοκιμάστε :

#Ανοίξτε τη διαδικασία χρησιμοποιώντας τη συνάρτηση Popen().

παραγωγή = υποδιεργασία . Popen ( εντολή , stdout = υποδιεργασία . ΣΩΛΗΝΑΣ ,

stderr = υποδιεργασία . ΣΩΛΗΝΑΣ , κείμενο = Αληθής )

#Περιμένετε να ολοκληρωθεί η διαδικασία

retCode = παραγωγή. Περίμενε ( )

#Εκτυπώστε τον κωδικό επιστροφής

Τυπώνω ( 'Κωδικός επιστροφής:' , retCode )

εκτός :

#Εκτύπωση μηνύματος σφάλματος για λάθος

Τυπώνω ( 'Λάθος:' , sys . exc_info ( ) )

Παραγωγή:

Μια παρόμοια έξοδος εμφανίζεται μετά την εκτέλεση του προηγούμενου σεναρίου:

Πήγαινε στην κορυφή

Ανακατευθύνετε την έξοδο της υποδιεργασίας στο αρχείο

Δημιουργήστε ένα αρχείο Python με το ακόλουθο σενάριο που γράφει την έξοδο της υποδιεργασίας σε ένα αρχείο κειμένου. Η εντολή που εκτελείται από την υποδιεργασία λαμβάνεται από τον χρήστη.

#Import module

εισαγωγή υποδιεργασία

#Ορίστε το όνομα αρχείου

όνομα αρχείου = 'outfile.txt'

#Λάβετε μια εντολή ping

cmd = εισαγωγή ( 'Εισαγάγετε μια εντολή ping:' )

#Διαχωρίστε τα δεδομένα που λαμβάνονται με βάση το χώρο

args = cmd . διαίρεση ( )

#Γράψτε την έξοδο εντολής στο αρχείο

με Άνοιξε ( όνομα αρχείου , 'Σε' ) όπως και outdata:

επεξεργάζομαι, διαδικασία = υποδιεργασία . Popen ( args , stdout = εκτός δεδομένων )

#Περιμένετε να ολοκληρώσετε τη διαδικασία

επιστροφή_κωδικός = επεξεργάζομαι, διαδικασία. Περίμενε ( )

Παραγωγή:

Σύμφωνα με την ακόλουθη έξοδο, το 'ping -c 3 www.google.com Η εντολή ' λαμβάνεται από τον χρήστη και η εντολή 'cat' χρησιμοποιείται για την εμφάνιση του περιεχομένου του αρχείου που έχει γραφτεί από την υποδιεργασία:

Πήγαινε στην κορυφή

Multiprocessing Using Subprocess.Popen

Δημιουργήστε ένα αρχείο Python με το ακόλουθο σενάριο όπου εμφανίζεται η χρήση της πολυεπεξεργασίας χρησιμοποιώντας υποδιεργασία. Εδώ, μια συνάρτηση με το όνομα display_msg() καλείται πολλές φορές χρησιμοποιώντας πολλαπλή επεξεργασία.

#Εισαγωγή απαραίτητων λειτουργικών μονάδων

εισαγωγή πολυεπεξεργασία

εισαγωγή υποδιεργασία

#Ορίστε τη συνάρτηση που θα κληθεί με πολυεπεξεργασία

def display_msg ( n ) :

#Ορίστε την εντολή με τη συνάρτηση format().

cmd = 'echo 'Προγραμματισμός Python'' . μορφή ( n )

#Ανοίξτε τη διαδικασία χρησιμοποιώντας τη συνάρτηση Popen().

επεξεργάζομαι, διαδικασία = υποδιεργασία . Popen ( cmd , κέλυφος = Αληθής , stdout = υποδιεργασία . ΣΩΛΗΝΑΣ )

#Ανακτήστε την έξοδο και το σφάλμα επικοινωνώντας με τη διαδικασία

stdout , λάθος = επεξεργάζομαι, διαδικασία. ΕΠΙΚΟΙΝΩΝΩ ( )

#Εκτυπώστε το αποτέλεσμα

Τυπώνω ( stdout. αποκρυπτογραφώ ( ) )

#Καλέστε τη συνάρτηση 5 φορές δημιουργώντας το multiprocessing.Pool

με πολυεπεξεργασία. Πισίνα ( πολυεπεξεργασία. cpu_count ( ) ) όπως και mp:

#Χαρτογράφηση της συνάρτησης

σ.τ. χάρτης ( display_msg , εύρος ( 1 , 5 ) )

Παραγωγή:

Η ακόλουθη έξοδος εμφανίζεται μετά την εκτέλεση του προηγούμενου σεναρίου:

Πήγαινε στην κορυφή

Χειριστείτε τις ροές εισόδου και εξόδου

Δημιουργήστε ένα αρχείο κειμένου με το όνομα 'test.txt' με το ακόλουθο περιεχόμενο πριν δημιουργήσετε το σενάριο Python αυτού του παραδείγματος.

test.txt

PERL

Πύθων

βίαιο χτύπημα

php

Δημιουργήστε ένα αρχείο Python με το ακόλουθο σενάριο που χρησιμοποιεί μια υποδιεργασία για την ανάγνωση του περιεχομένου του αρχείου 'test.txt' και μια άλλη υποδιεργασία για την αναζήτηση μιας συγκεκριμένης λέξης σε αυτό το αρχείο κειμένου. Εδώ, η λέξη 'python' αναζητείται στο 'αρχείο test.txt' που περιέχει αυτήν τη λέξη.

#Import modules

εισαγωγή υποδιεργασία

#Ορίστε μια διαδικασία για τη ροή εισόδου

σε εξέλιξη = υποδιεργασία . Popen ( [ 'Γάτα' , 'test.txt' ] , stdout = υποδιεργασία . ΣΩΛΗΝΑΣ , κείμενο = Tru > #Ορίστε μια διαδικασία για τη ροή εξόδου

εκτός_διαδικασίας = υποδιεργασία . Popen (

[ 'λαβή' , 'Πύθων' ] , stdin = σε εξέλιξη. stdout ,

stdout = υποδιεργασία . ΣΩΛΗΝΑΣ , κείμενο = Αληθής )

#Αποθηκεύστε την έξοδο των διεργασιών εισόδου και εξόδου

παραγωγή , _ = εκτός_διαδικασίας. ΕΠΙΚΟΙΝΩΝΩ ( )

#Εκτυπώστε το αποτέλεσμα

Τυπώνω ( 'Παραγωγή:' , παραγωγή )

Παραγωγή:

Η ακόλουθη έξοδος εμφανίζεται μετά την εκτέλεση του σεναρίου:

Πήγαινε στην κορυφή

Ελέγξτε την υποδιεργασία με χρήση χρονοδιακόπτη

Δημιουργήστε ένα αρχείο Python με το ακόλουθο σενάριο που χρησιμοποιεί ένα χρονόμετρο για να εκτελέσει μια εντολή χρησιμοποιώντας μια υποδιεργασία. Εδώ, το μπλοκ 'try-except' χρησιμοποιείται για την εκκίνηση του χρονοδιακόπτη και το μπλοκ 'τελικά' χρησιμοποιείται για την ακύρωση του χρονοδιακόπτη.

#Εισαγωγή της λειτουργικής μονάδας υποδιεργασίας

εισαγωγή υποδιεργασία

#Εισαγωγή της μονάδας Timer

από σπείρωμα εισαγωγή Μετρών την ώραν

#Ορίστε την εντολή

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

#Ανοίξτε τη διαδικασία

Π = υποδιεργασία . Popen (

cmd , stdout = υποδιεργασία . ΣΩΛΗΝΑΣ , stderr = υποδιεργασία . ΣΩΛΗΝΑΣ )

#Ορίστε το χρονόμετρο

μετρών την ώραν = Μετρών την ώραν ( 2 , λάμδα διαδικασία: διαδικασία. σκοτώνω ( ) , [ Π ] )

δοκιμάστε :

#Εκκινήστε το χρονόμετρο

μετρών την ώραν. αρχή ( )

#Ανάγνωση εξόδου

stdout , _ = Π. ΕΠΙΚΟΙΝΩΝΩ ( )

#Έξοδος εκτύπωσης

Τυπώνω ( stdout. αποκρυπτογραφώ ( ) )

εκτός :

#Εκτύπωση μηνύματος σφάλματος για λάθος

Τυπώνω ( 'Λάθος:' , sys . exc_info ( ) )

τελικά :

#Σταματήστε το χρονόμετρο

μετρών την ώραν. Ματαίωση ( )

Παραγωγή:

Η ακόλουθη έξοδος εμφανίζεται μετά την εκτέλεση του σεναρίου:

Πήγαινε στην κορυφή

Διαβάστε την είσοδο ροής

Δημιουργήστε ένα αρχείο Python που διαβάζει το περιεχόμενο της εξόδου υποδιεργασίας χρησιμοποιώντας έναν βρόχο 'while' και αποθηκεύστε το περιεχόμενο σε μια μεταβλητή. Το περιεχόμενο αυτής της μεταβλητής εκτυπώνεται αργότερα. Εδώ, η εντολή 'curl' χρησιμοποιείται στην υποδιεργασία για το www.google.com URL.

#Import module

εισαγωγή υποδιεργασία

#Define command

cmd = [ 'μπούκλα' , 'www.example.com' ]

Π = υποδιεργασία . Popen ( cmd , stdout = υποδιεργασία . ΣΩΛΗΝΑΣ ,

stderr = υποδιεργασία . ΣΩΛΗΝΑΣ , κείμενο = Αληθής >

#Αρχικοποιήστε τη μεταβλητή εξόδου

παραγωγή = ''

ενώ Αληθής :

#Διαβάστε την έξοδο της διαδικασίας γραμμή προς γραμμή

ln = Π. stdout . γραμμή ανάγνωσης ( )

#Τερματισμός από τον βρόχο όταν ολοκληρωθεί η υποδιεργασία

αν δεν ln:

Διακοπή

παραγωγή = έξοδος + ln

#Εκτυπώστε τη γραμμή

Τυπώνω ( παραγωγή )

#Λάβετε τον κωδικό επιστροφής αφού ολοκληρώσετε τη διαδικασία

επιστροφή_κωδικός = Π. Περίμενε ( )

#Εκτυπώστε τον κωδικό επιστροφής

Τυπώνω ( 'Κωδικός επιστροφής:' , επιστροφή_κωδικός )

Παραγωγή:

Το τελευταίο μέρος των τριών εξόδων φαίνεται στην παρακάτω εικόνα. Ο κωδικός επιστροφής μετά την ολοκλήρωση της υποδιαδικασίας είναι 0:

Πήγαινε στην κορυφή

συμπέρασμα

Διαφορετικές χρήσεις της υποδιεργασίας Python.Popen() παρουσιάζονται σε αυτό το σεμινάριο χρησιμοποιώντας πολλαπλά σενάρια Python που θα βοηθήσουν τους χρήστες της Python να γνωρίζουν τις βασικές χρήσεις αυτής της συνάρτησης.