Πώς να εκτελέσετε εξωτερικές εντολές στην Python

Python subprocess

Εκτέλεση εντολών συστήματος από την Python

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

Είτε αυτοματοποιείτε επαναλαμβανόμενες εργασίες είτε ενσωματώνετε πολύπλοκες ροές εργασίας, η κατανόηση του τρόπου κλήσης εντολών συστήματος στην Python μπορεί να βελτιώσει σημαντικά την παραγωγικότητά σας. Σε αυτόν τον οδηγό, θα εξερευνήσουμε διάφορες μεθόδους για να το επιτύχουμε αποτελεσματικά.

Εντολή Περιγραφή
subprocess.run Εκτελεί μια εντολή σε ένα υποκέλυφος. Μπορεί να καταγράψει αποτελέσματα και σφάλματα.
subprocess.run([...], capture_output=True) Καταγράφει την τυπική έξοδο και το τυπικό σφάλμα της εκτελούμενης εντολής.
subprocess.run([...], shell=True) Εκτελεί την εντολή μέσω του κελύφους, επιτρέποντας χαρακτηριστικά φλοιού όπως χαρακτήρες μπαλαντέρ.
subprocess.Popen Εκτελεί μια εντολή σε μια νέα διαδικασία, παρέχοντας περισσότερο έλεγχο στην εκτέλεσή της.
process.stdout.readline() Διαβάζει μια γραμμή εξόδου από την τυπική έξοδο της διαδικασίας.
os.system Εκτελεί μια εντολή σε ένα υποκέλυφος, που χρησιμοποιείται συνήθως για απλή εκτέλεση εντολών.
subprocess.check_output Εκτελεί μια εντολή και επιστρέφει την έξοδο της. Δημιουργεί μια εξαίρεση εάν η εντολή αποτύχει.
os.environ.copy() Δημιουργεί ένα αντίγραφο των τρεχουσών μεταβλητών περιβάλλοντος, επιτρέποντας τροποποιήσεις.
env parameter in subprocess.run Καθορίζει μεταβλητές περιβάλλοντος για τη νέα διαδικασία.

Κατανόηση της εκτέλεσης σεναρίου σε Python

Τα σενάρια που παρέχονται παρουσιάζουν διάφορους τρόπους εκτέλεσης εξωτερικών εντολών χρησιμοποιώντας Python. ο Η εντολή είναι ευέλικτη, επιτρέποντάς σας να εκτελείτε εντολές φλοιού απευθείας από το σενάριο Python. Για παράδειγμα, εκτυπώνει ένα μήνυμα στην κονσόλα, ενώ συλλαμβάνει την έξοδο του ls -l εντολή, εμφανίζοντας μια λεπτομερή λίστα καταλόγου. Χρησιμοποιώντας με επιτρέπει τη χρήση χαρακτηριστικών φλοιού, όπως η επέκταση χαρακτήρων μπαλαντέρ, καθιστώντας το εύχρηστο για πιο σύνθετες εντολές.

ο Η εντολή παρέχει περισσότερο έλεγχο στην εκτέλεση εντολών επιτρέποντας την ασύγχρονη εκτέλεση εντολών και την αλληλεπίδραση με τις ροές εισόδου και εξόδου της διαδικασίας. Για παράδειγμα, το παράδειγμα σεναρίου με κάνει συνεχώς ping στην τοπική μηχανή και διαβάζει κάθε γραμμή εξόδου. Επιπροσθέτως, χρησιμοποιείται για απλή εκτέλεση εντολών αλλά δεν έχει την ευελιξία του subprocess. Οι μεταβλητές περιβάλλοντος μπορούν να τροποποιηθούν και να περάσουν στην υποδιεργασία χρησιμοποιώντας και το παράμετρος σε , επιτρέποντας τη δυναμική εκτέλεση εντολών με βάση το περιβάλλον.

Εκτέλεση εξωτερικών εντολών σε Python

Χρησιμοποιώντας τη μονάδα υποδιεργασίας της Python

import subprocess
# Example 1: Running a simple shell command
subprocess.run(['echo', 'Hello, World!'])
# Example 2: Capturing the output of a command
result = subprocess.run(['ls', '-l'], capture_output=True, text=True)
print(result.stdout)
# Example 3: Running a command with shell=True
subprocess.run('echo Hello from the shell', shell=True)
# Example 4: Checking the return code
result = subprocess.run(['ls', 'nonexistentfile'], capture_output=True)
if result.returncode != 0:
    print('Command failed')
# Example 5: Using subprocess.Popen for more control
process = subprocess.Popen(['ping', 'localhost'], stdout=subprocess.PIPE)
while True:
    output = process.stdout.readline()
    if output == b'' and process.poll() is not None:
        break
    if output:
        print(output.strip().decode())

Αυτοματοποίηση εργασιών συστήματος με Python

Χρήση λειτουργικών μονάδων os.system και υποδιεργασίας

import os
import subprocess
# Example 1: Using os.system to run a command
os.system('echo This is a test')
# Example 2: Running a command and capturing output with subprocess
result = subprocess.run(['date'], capture_output=True, text=True)
print('Current date and time:', result.stdout)
# Example 3: Executing multiple commands
commands = ['echo First command', 'echo Second command']
for cmd in commands:
    os.system(cmd)
# Example 4: Running a command with environment variables
env = os.environ.copy()
env['MY_VAR'] = 'Hello'
subprocess.run('echo $MY_VAR', shell=True, env=env)
# Example 5: Handling command errors
try:
    subprocess.check_output(['false_command'], stderr=subprocess.STDOUT)
except subprocess.CalledProcessError as e:
    print('An error occurred:', e.output.decode())

Προηγμένες τεχνικές για την εκτέλεση εντολών συστήματος

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

Για παράδειγμα, η αλυσίδα των εντολών και η διαδοχική επεξεργασία της εξόδου τους μπορεί να επιτευχθεί με τη διοχέτευση της εξόδου μιας εντολής σε μια άλλη χρησιμοποιώντας . Αυτό σας επιτρέπει να δημιουργήσετε ισχυρές ακολουθίες εντολών παρόμοιες με αυτές που θα κάνατε σε ένα σενάριο φλοιού. Μπορείτε επίσης να χρησιμοποιήσετε για να εκτελείτε πολλές εντολές υποδιεργασίας ταυτόχρονα, βελτιώνοντας την αποτελεσματικότητα του σεναρίου σας, ειδικά όταν ασχολείστε με εργασίες που συνδέονται με I/O.

  1. Πώς μπορώ να εκτελέσω μια εντολή κελύφους και να λάβω την έξοδο της στην Python;
  2. Χρήση με για να καταγράψετε την έξοδο της εντολής.
  3. Ποια είναι η διαφορά μεταξύ και ?
  4. είναι μια απλούστερη διεπαφή που περιμένει να ολοκληρωθεί η εντολή, ενώ δίνει περισσότερο έλεγχο στην εκτέλεση εντολών, επιτρέποντας την ασύγχρονη λειτουργία.
  5. Πώς μπορώ να χειριστώ τα σφάλματα κατά την εκτέλεση μιας εντολής συστήματος;
  6. Χρήση και μπλοκ με να συλλάβει και να χειριστεί τα λάθη.
  7. Μπορώ να δώσω μεταβλητές περιβάλλοντος σε μια εντολή;
  8. Ναι, χρησιμοποιήστε το παράμετρος σε ή να περάσει μεταβλητές περιβάλλοντος.
  9. Πώς εκτελώ πολλές εντολές στη σειρά;
  10. Χρήση ή σε βρόχο ή αλυσίδα εντολές χρησιμοποιώντας σωλήνες με .
  11. Πώς μπορώ να εκτελέσω μια εντολή που απαιτεί εισαγωγή χρήστη;
  12. Χρήση με και επικοινωνήστε με τη διαδικασία χρησιμοποιώντας .
  13. Ποια είναι η χρήση του στην εκτέλεση εντολών;
  14. βοηθά στη σωστή ανάλυση των εντολών του κελύφους, διασφαλίζοντας ότι τα ορίσματα με κενά διαχειρίζονται σωστά.
  15. Πώς μπορώ να εκτελέσω μια εντολή στο παρασκήνιο;
  16. Χρήση χωρίς να περιμένετε να ολοκληρωθεί η διαδικασία ή να χρησιμοποιήσετε για τη διαχείριση της εκτέλεσης στο παρασκήνιο.

Προηγμένες τεχνικές για την εκτέλεση εντολών συστήματος

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

Για παράδειγμα, η αλυσίδα των εντολών και η διαδοχική επεξεργασία της εξόδου τους μπορεί να επιτευχθεί με τη διοχέτευση της εξόδου μιας εντολής σε μια άλλη χρησιμοποιώντας . Αυτό σας επιτρέπει να δημιουργήσετε ισχυρές ακολουθίες εντολών παρόμοιες με αυτές που θα κάνατε σε ένα σενάριο φλοιού. Μπορείτε επίσης να χρησιμοποιήσετε για να εκτελείτε πολλές εντολές υποδιεργασίας ταυτόχρονα, βελτιώνοντας την αποτελεσματικότητα του σεναρίου σας, ειδικά όταν ασχολείστε με εργασίες που συνδέονται με I/O.

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