Kā izpildīt ārējās komandas Python

Python subprocess

Sistēmas komandu palaišana no Python

Python nodrošina jaudīgas iespējas ārēju programmu un sistēmas komandu izpildei tieši no jūsu skriptiem. Šī funkcija ļauj izmantot Python vienkāršību, vienlaikus izmantojot jūsu operētājsistēmā pieejamo rīku plašo klāstu.

Neatkarīgi no tā, vai automatizējat atkārtotus uzdevumus vai integrējat sarežģītas darbplūsmas, izpratne par to, kā Python izsaukt sistēmas komandas, var ievērojami uzlabot jūsu produktivitāti. Šajā rokasgrāmatā mēs izpētīsim dažādas metodes, kā to efektīvi sasniegt.

Pavēli Apraksts
subprocess.run Izpilda komandu apakščaulā. Var uztvert izvadi un kļūdas.
subprocess.run([...], capture_output=True) Uztver izpildītās komandas standarta izvadi un standarta kļūdu.
subprocess.run([...], shell=True) Palaiž komandu čaulā, ļaujot čaulas līdzekļus, piemēram, aizstājējzīmes.
subprocess.Popen Izpilda komandu jaunā procesā, nodrošinot lielāku kontroli pār tās izpildi.
process.stdout.readline() Nolasa izvades rindu no procesa standarta izvades.
os.system Izpilda komandu apakšapvalkā, ko parasti izmanto vienkāršai komandu izpildei.
subprocess.check_output Palaiž komandu un atgriež tās izvadi. Rada izņēmumu, ja komanda neizdodas.
os.environ.copy() Izveido pašreizējo vides mainīgo kopiju, ļaujot veikt modifikācijas.
env parameter in subprocess.run Norāda vides mainīgos jaunajam procesam.

Izpratne par skripta izpildi Python

Piedāvātie skripti parāda dažādus veidus, kā izpildīt ārējās komandas, izmantojot Python. The komanda ir daudzpusīga, ļaujot palaist čaulas komandas tieši no Python skripta. Piemēram, izdrukā ziņojumu konsolei, kamēr tver izvadi ls -l komandu, parādot detalizētu direktoriju sarakstu. Izmantojot ar ļauj izmantot čaulas līdzekļus, piemēram, aizstājējzīmju paplašināšanu, padarot to parocīgu sarežģītākām komandām.

The komanda nodrošina lielāku kontroli pār komandu izpildi, ļaujot asinhroni darboties un mijiedarboties ar procesa ievades un izvades straumēm. Piemēram, skripta piemērs ar nepārtraukti nosūta ping vietējai mašīnai un nolasa katru izvades rindiņu. Turklāt tiek izmantota vienkāršai komandu izpildei, taču tai trūkst elastības subprocess. Vides mainīgos var modificēt un nodot apakšprocesam, izmantojot un parametrs iekšā , kas ļauj dinamiski izpildīt komandas, pamatojoties uz vidi.

Ārējo komandu izpilde programmā Python

Izmantojot Python apakšprocesa moduli

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

Sistēmas uzdevumu automatizācija, izmantojot Python

Izmantojot os.system un apakšprocesu moduļus

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

Uzlabotas metodes sistēmas komandu izpildei

Vēl viens sistēmas komandu izpildes aspekts Python ietver izmantošanu modulis, lai apstrādātu čaulas komandu parsēšanu. Šis modulis nodrošina veidu, kā sadalīt čaulas komandas saraksta formātā, ko pēc tam var nodot funkcijas. Tas nodrošina, ka argumenti ar atstarpēm tiek apstrādāti pareizi. Turklāt jūs varat izmantot lai novirzītu standarta ievades, izvades un kļūdu straumes uz vecāku procesu, ļaujot veikt sarežģītāku starpprocesu saziņu.

Piemēram, komandu ķēdes apstrādi un to izvades secīgu apstrādi var panākt, savienojot vienas komandas izvadi citā, izmantojot . Tas ļauj izveidot spēcīgas komandu secības, kas ir līdzīgas tam, ko jūs darītu čaulas skriptā. Varat arī izmantot lai vienlaikus palaistu vairākas apakšprocesa komandas, uzlabojot skripta efektivitāti, it īpaši, veicot I/O uzdevumus.

  1. Kā es varu palaist čaulas komandu un iegūt tās izvadi programmā Python?
  2. Izmantot ar lai uztvertu komandas izvadi.
  3. Kāda ir atšķirība starp un ?
  4. ir vienkāršāks interfeiss, kas gaida, līdz komanda tiks pabeigta, kamēr nodrošina lielāku kontroli pār komandu izpildi, ļaujot asinhroni darboties.
  5. Kā rīkoties ar kļūdām, palaižot sistēmas komandu?
  6. Izmantot un bloki ar lai uztvertu un apstrādātu kļūdas.
  7. Vai es varu nodot vides mainīgos komandai?
  8. Jā, izmantojiet parametrs iekšā vai lai nodotu vides mainīgos.
  9. Kā pēc kārtas palaist vairākas komandas?
  10. Izmantot vai cilpā vai ķēdē komandas, izmantojot caurules ar .
  11. Kā es varu izpildīt komandu, kurai nepieciešama lietotāja ievade?
  12. Izmantot ar un sazināties ar procesu, izmantojot .
  13. Kāda ir izmantošana komandas izpildē?
  14. palīdz pareizi parsēt čaulas komandas, nodrošinot, ka argumenti ar atstarpēm tiek pareizi apstrādāti.
  15. Kā es varu palaist komandu fonā?
  16. Izmantot negaidot procesa pabeigšanu vai izmantošanu lai pārvaldītu fona izpildi.

Uzlabotas metodes sistēmas komandu izpildei

Vēl viens sistēmas komandu izpildes aspekts Python ietver izmantošanu modulis, lai apstrādātu čaulas komandu parsēšanu. Šis modulis nodrošina veidu, kā sadalīt čaulas komandas saraksta formātā, ko pēc tam var nodot funkcijas. Tas nodrošina, ka argumenti ar atstarpēm tiek apstrādāti pareizi. Turklāt jūs varat izmantot lai novirzītu standarta ievades, izvades un kļūdu straumes uz vecāku procesu, ļaujot veikt sarežģītāku starpprocesu saziņu.

Piemēram, komandu ķēdes ķēdi un to izvades secīgu apstrādi var panākt, savienojot vienas komandas izvadi citā, izmantojot . Tas ļauj izveidot spēcīgas komandu secības, kas ir līdzīgas tam, ko jūs darītu čaulas skriptā. Varat arī izmantot lai vienlaikus palaistu vairākas apakšprocesa komandas, uzlabojot skripta efektivitāti, it īpaši, veicot I/O uzdevumus.

Ārējo komandu izpilde programmā Python ir daudzpusīga un jaudīga iespēja, kas var ievērojami uzlabot jūsu skriptēšanas un automatizācijas uzdevumus. Izmantojot moduli, varat palaist čaulas komandas, tvert to rezultātus un efektīvi apstrādāt kļūdas. The funkcija nodrošina vienkāršāku alternatīvu pamata komandu izpildei. Turklāt, iekļaujot modulis nodrošina pareizu sarežģītu čaulas komandu parsēšanu. Izprotot šīs metodes, varat izmantot Python stiprās puses, vienlaikus izmantojot visu operētājsistēmas komandrindas rīku potenciālu.