Θέμα Περιεχομένων:
- Εκτελέστε μια απλή εντολή Linux
- Εκτελέστε μια εντολή με δεδομένα εισόδου
- Εκτελέστε ένα σενάριο Python
- Χειριστείτε το σφάλμα υποδιεργασίας
- Επιστρέψτε τον Κώδικα Υποδιεργασίας. Ανοίξτε
- Ανακατευθύνετε την έξοδο της υποδιεργασίας στο αρχείο
- Multiprocessing Using Subprocess.Popen
- Χειριστείτε τη ροή εισόδου και εξόδου μικρό
- Ελέγξτε το Timeout και την καθυστέρηση
- Διαβάστε μια είσοδο ροής
Εκτελέστε μια απλή εντολή Linux
Η εντολή 'ημερομηνία' χρησιμοποιείται για την εμφάνιση της τρέχουσας ημερομηνίας και ώρας του συστήματος. Δημιουργήστε ένα αρχείο Python με το ακόλουθο σενάριο που δημιουργεί μια υποδιεργασία που εκτελεί την εντολή 'date' και εκτυπώστε την έξοδο αυτής της εντολής:
#Εισαγωγή της ενότηταςεισαγωγή υποδιεργασία
#Ορίστε μια εντολή για την υποδιεργασία και
#open διεργασία χρησιμοποιώντας τη συνάρτηση Popen().
παραγωγή = υποδιεργασία . Popen ( [ 'ημερομηνία' ] , stdout = υποδιεργασία . ΣΩΛΗΝΑΣ )
#Ανακτήστε την έξοδο και το σφάλμα επικοινωνώντας με τη διαδικασία
stdout , stderr = παραγωγή. ΕΠΙΚΟΙΝΩΝΩ ( )
#Εκτυπώστε το αποτέλεσμα
Τυπώνω ( stdout. αποκρυπτογραφώ ( ) )
Παραγωγή:
Η ακόλουθη έξοδος εμφανίζεται μετά την εκτέλεση του προηγούμενου σεναρίου:
Εκτελέστε μια εντολή με δεδομένα εισόδου
Η εντολή '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' ληφθεί ως είσοδος που είναι έγκυρη εντολή:
Η ακόλουθη έξοδος εμφανίζεται εάν η εντολή 'usr' ληφθεί ως είσοδος που είναι έγκυρη εντολή:
Επιστρέψτε τον Κώδικα Υποδιεργασίας. Ανοίξτε
Δημιουργήστε ένα αρχείο 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 να γνωρίζουν τις βασικές χρήσεις αυτής της συνάρτησης.