Kuidas Pythonis väliseid käske käivitada

Python subprocess

Pythoni süsteemikäskude käitamine

Python pakub võimsaid võimalusi väliste programmide ja süsteemikäskude täitmiseks otse teie skriptidest. See funktsioon võimaldab teil ära kasutada Pythoni lihtsust, kasutades samal ajal ära teie operatsioonisüsteemis saadaolevaid tohutuid tööriistu.

Ükskõik, kas automatiseerite korduvaid ülesandeid või integreerite keerulisi töövooge, võib Pythonis süsteemikäskude kutsumise mõistmine teie tootlikkust märkimisväärselt tõsta. Selles juhendis uurime erinevaid meetodeid selle tõhusaks saavutamiseks.

Käsk Kirjeldus
subprocess.run Täidab käsu alamkestas. Saab jäädvustada väljundit ja vigu.
subprocess.run([...], capture_output=True) Jäädvustab käivitatud käsu standardväljundi ja standardvea.
subprocess.run([...], shell=True) Käivitab käsu läbi kesta, lubades kesta funktsioone, nagu metamärgid.
subprocess.Popen Täidab käsu uues protsessis, pakkudes suuremat kontrolli selle täitmise üle.
process.stdout.readline() Loeb väljundrea protsessi standardväljundist.
os.system Käivitab käsu alamkestas, mida tavaliselt kasutatakse lihtsa käsu täitmiseks.
subprocess.check_output Käivitab käsu ja tagastab selle väljundi. Tekitab erandi, kui käsk ebaõnnestub.
os.environ.copy() Loob praeguste keskkonnamuutujate koopia, võimaldades muudatusi.
env parameter in subprocess.run Määrab uue protsessi jaoks keskkonnamuutujad.

Skripti täitmise mõistmine Pythonis

Kaasasolevad skriptid näitavad erinevaid viise väliste käskude täitmiseks Pythoni abil. The käsk on mitmekülgne, võimaldades teil käivitada shellikäske otse Pythoni skriptist. Näiteks, prindib konsooli sõnumi, samas lööb väljundi ls -l käsk, mis kuvab üksikasjaliku kataloogiloendi. Kasutades koos võimaldab kasutada shelli funktsioone, nagu metamärgi laiendamine, muutes selle mugavaks keerukamate käskude jaoks.

The käsk annab suurema kontrolli käsu täitmise üle, võimaldades asünkroonse käsu käitamist ja suhtlemist protsessi sisend- ja väljundvoogudega. Näiteks skripti näide koos pingib pidevalt kohalikku masinat ja loeb iga väljundi rida. Lisaks kasutatakse lihtsa käsu täitmiseks, kuid sellel puudub paindlikkus subprocess. Keskkonnamuutujaid saab muuta ja alamprotsessile edastada kasutades ja parameeter sisse , mis võimaldab keskkonnal põhinevat dünaamilist käskude täitmist.

Väliste käskude täitmine Pythonis

Pythoni alamprotsessimooduli kasutamine

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())

Süsteemiülesannete automatiseerimine Pythoniga

os.system ja alamprotsessi moodulite kasutamine

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())

Täiustatud tehnikad süsteemikäskude täitmiseks

Teine Pythonis süsteemikäskude täitmise aspekt hõlmab käsu kasutamist moodul shellikäsu sõelumiseks. See moodul võimaldab jagada shellikäsud loendivormingusse, mida saab seejärel edasi anda funktsioonid. See tagab, et tühikutega argumente käsitletakse õigesti. Lisaks saate kasutada standardsete sisend-, väljund- ja veavoogude suunamiseks põhiprotsessi, võimaldades keerukamat protsessidevahelist suhtlust.

Näiteks käskude aheldamist ja nende väljundi järjestikust töötlemist saab saavutada, ühendades ühe käsu väljundi teise, kasutades . See võimaldab teil luua võimsaid käsujadasid, mis on sarnased shelliskriptis tehtavatega. Võite ka kasutada mitme alamprotsessikäsu samaaegseks käivitamiseks, suurendades teie skripti tõhusust, eriti kui tegelete I/O-ga seotud ülesannetega.

  1. Kuidas käivitada shellikäsk ja saada selle väljund Pythonis?
  2. Kasuta koos käsu väljundi hõivamiseks.
  3. Mis on vahet ja ?
  4. on lihtsam liides, mis ootab käsu täitmist, samas annab suurema kontrolli käsu täitmise üle, võimaldades asünkroonset tööd.
  5. Kuidas käsitleda tõrkeid süsteemikäsu käivitamisel?
  6. Kasutage ja plokid koos vigade tabamiseks ja käsitlemiseks.
  7. Kas ma saan käsule edastada keskkonnamuutujaid?
  8. Jah, kasuta parameeter sisse või keskkonnamuutujate edastamiseks.
  9. Kuidas käivitada mitu käsku järjest?
  10. Kasuta või ahelas või ahelkäsklusi kasutades torusid .
  11. Kuidas saan käivitada käsku, mis nõuab kasutaja sisestust?
  12. Kasuta koos ja suhelda protsessiga kasutades .
  13. Mis kasu on käsu täitmisel?
  14. aitab shellikäske õigesti sõeluda, tagades tühikutega argumentide õige käsitlemise.
  15. Kuidas taustal käsku käivitada?
  16. Kasutage ootamata protsessi lõppu või kasutamata tausta täitmise haldamiseks.

Täiustatud tehnikad süsteemikäskude täitmiseks

Teine Pythonis süsteemikäskude täitmise aspekt hõlmab käsu kasutamist moodul shellikäsu sõelumiseks. See moodul võimaldab jagada shellikäsud loendivormingusse, mida saab seejärel edasi anda funktsioonid. See tagab, et tühikutega argumente käsitletakse õigesti. Lisaks saate kasutada standardsete sisend-, väljund- ja veavoogude suunamiseks põhiprotsessi, võimaldades keerukamat protsessidevahelist suhtlust.

Näiteks käskude aheldamist ja nende väljundi järjestikust töötlemist saab saavutada, ühendades ühe käsu väljundi teise, kasutades . See võimaldab teil luua võimsaid käsujadasid, mis on sarnased shelliskriptis tehtavatega. Võite ka kasutada mitme alamprotsessikäsu samaaegseks käivitamiseks, suurendades skripti tõhusust, eriti kui tegemist on I/O-ga seotud ülesannetega.

Väliste käskude täitmine Pythonis on mitmekülgne ja võimas võimalus, mis võib teie skriptimis- ja automatiseerimisülesandeid märkimisväärselt täiustada. Kasutades mooduli abil saate käivitada shellikäske, jäädvustada nende väljundeid ja käsitleda tõhusalt vigu. The funktsioon pakub lihtsamat alternatiivi põhikäskude täitmiseks. Lisaks sisaldab see moodul tagab keerukate shellikäskude korraliku sõelumise. Nende tehnikate mõistmine võimaldab teil ära kasutada Pythoni tugevusi, kasutades samal ajal ära oma operatsioonisüsteemi käsurea tööriistade kogu potentsiaal.