Kuinka suorittaa ulkoisia komentoja Pythonissa

Python subprocess

Pythonin järjestelmäkomentojen suorittaminen

Python tarjoaa tehokkaita ominaisuuksia ulkoisten ohjelmien ja järjestelmäkomentojen suorittamiseen suoraan komentosarjoistasi. Tämän ominaisuuden avulla voit hyödyntää Pythonin yksinkertaisuutta samalla kun hyödynnät käyttöjärjestelmäsi laajaa työkaluvalikoimaa.

Olitpa automatisoimassa toistuvia tehtäviä tai integroimassa monimutkaisia ​​työnkulkuja, Pythonin järjestelmäkomentojen kutsumisen ymmärtäminen voi parantaa tuottavuuttasi merkittävästi. Tässä oppaassa tutkimme erilaisia ​​tapoja saavuttaa tämä tehokkaasti.

Komento Kuvaus
subprocess.run Suorittaa komennon alikuoressa. Voi kaapata tulosteet ja virheet.
subprocess.run([...], capture_output=True) Kaappaa suoritetun komennon vakiotulosteen ja vakiovirheen.
subprocess.run([...], shell=True) Suorittaa komennon komentotulkin läpi sallien komentotulkin ominaisuuksia, kuten yleismerkkejä.
subprocess.Popen Suorittaa komennon uudessa prosessissa ja tarjoaa paremman hallinnan sen suorittamiseen.
process.stdout.readline() Lukee tulosrivin prosessin vakiotulosteesta.
os.system Suorittaa komennon alikuoressa, jota käytetään yleisesti yksinkertaiseen komennon suorittamiseen.
subprocess.check_output Suorittaa komennon ja palauttaa sen tulosteen. Tekee poikkeuksen, jos komento epäonnistuu.
os.environ.copy() Luo kopion nykyisistä ympäristömuuttujista ja sallii muutokset.
env parameter in subprocess.run Määrittää ympäristömuuttujat uudelle prosessille.

Pythonin komentosarjan suorittamisen ymmärtäminen

Toimitetut komentosarjat osoittavat erilaisia ​​tapoja suorittaa ulkoisia komentoja Pythonilla. The komento on monipuolinen, joten voit suorittaa komentotulkkikomentoja suoraan Python-skriptistä. Esimerkiksi, tulostaa viestin konsoliin, kun kaappaa tulosteen ls -l -komento, joka näyttää yksityiskohtaisen hakemistoluettelon. Käyttämällä kanssa mahdollistaa shell-ominaisuuksien, kuten jokerimerkkilaajennuksen, käytön, mikä tekee siitä kätevän monimutkaisemmille komentoille.

The komento tarjoaa paremman hallinnan komennon suorittamiseen sallimalla asynkronisen komennon suorittamisen ja vuorovaikutuksen prosessin syöttö- ja lähtövirtojen kanssa. Esimerkiksi komentosarjaesimerkki kanssa pingaa jatkuvasti paikallista konetta ja lukee jokaisen tulosteen rivin. Lisäksi, käytetään yksinkertaiseen komennon suorittamiseen, mutta siitä puuttuu joustavuus subprocess. Ympäristömuuttujia voidaan muokata ja siirtää aliprosessiin käyttämällä ja parametri sisään , mikä mahdollistaa dynaamisen komentojen suorittamisen ympäristöön perustuen.

Ulkoisten komentojen suorittaminen Pythonissa

Pythonin aliprosessimoduulin käyttäminen

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

Järjestelmätehtävien automatisointi Pythonilla

os.system- ja aliprosessimoduulien käyttö

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

Kehittyneet tekniikat järjestelmäkomentojen suorittamiseen

Toinen näkökohta järjestelmäkomentojen suorittamisessa Pythonissa sisältää moduuli shell-komentojen jäsentämiseen. Tämä moduuli tarjoaa tavan jakaa komentotulkkikomennot luettelomuotoon, johon voidaan sitten välittää toimintoja. Tämä varmistaa, että välilyöntejä sisältävät argumentit käsitellään oikein. Lisäksi voit käyttää ohjaamaan standarditulo-, tulos- ja virhevirrat pääprosessiin, mikä mahdollistaa monimutkaisemman prosessien välisen viestinnän.

Esimerkiksi komentojen ketjuttaminen ja niiden lähdön peräkkäinen käsittely voidaan saavuttaa putkestamalla yhden komennon tulos toiseen käyttämällä . Tämän avulla voit luoda tehokkaita komentosarjoja, jotka ovat samanlaisia ​​kuin mitä tekisit shell-skriptissä. Voit myös käyttää suorittaa useita aliprosessikomentoja samanaikaisesti, mikä parantaa komentosarjan tehokkuutta, etenkin kun käsitellään I/O-sidottuja tehtäviä.

  1. Kuinka voin suorittaa shell-komennon ja saada sen tulosteen Pythonissa?
  2. Käyttää kanssa siepataksesi komennon tulosteen.
  3. Mitä eroa on ja ?
  4. on yksinkertaisempi käyttöliittymä, joka odottaa komennon valmistumista, kun antaa paremman hallinnan komennon suorittamiseen, mikä mahdollistaa asynkronisen toiminnan.
  5. Kuinka käsittelen virheitä suoritettaessa järjestelmäkomentoa?
  6. Käyttää ja lohkojen kanssa havaita ja käsitellä virheitä.
  7. Voinko välittää ympäristömuuttujia komennolle?
  8. Kyllä, käytä parametri sisään tai ympäristömuuttujien välittämiseen.
  9. Kuinka suoritan useita komentoja peräkkäin?
  10. Käyttää tai silmukassa tai ketjussa komentoja käyttämällä putkia .
  11. Kuinka voin suorittaa komennon, joka vaatii käyttäjän syötteen?
  12. Käyttää kanssa ja kommunikoi prosessin kanssa käyttäen .
  13. Mitä hyötyä on komennon suorittamisessa?
  14. auttaa jäsentämään komentotulkkikomennot oikein varmistaen, että välilyöntejä sisältäviä argumentteja käsitellään oikein.
  15. Kuinka voin suorittaa komennon taustalla?
  16. Käyttää odottamatta prosessin valmistumista tai käyttöä taustasuorituksen hallintaan.

Kehittyneet tekniikat järjestelmäkomentojen suorittamiseen

Toinen näkökohta järjestelmäkomentojen suorittamisessa Pythonissa sisältää moduuli shell-komentojen jäsentämiseen. Tämä moduuli tarjoaa tavan jakaa komentotulkkikomennot luettelomuotoon, johon voidaan sitten välittää toimintoja. Tämä varmistaa, että välilyöntejä sisältävät argumentit käsitellään oikein. Lisäksi voit käyttää ohjaamaan standarditulo-, tulos- ja virhevirrat pääprosessiin, mikä mahdollistaa monimutkaisemman prosessien välisen viestinnän.

Esimerkiksi komentojen ketjuttaminen ja niiden lähdön peräkkäinen käsittely voidaan saavuttaa putkistamalla yhden komennon tulos toiseen käyttämällä . Tämän avulla voit luoda tehokkaita komentosarjoja, jotka ovat samanlaisia ​​kuin mitä tekisit shell-skriptissä. Voit myös käyttää suorittaa useita aliprosessikomentoja samanaikaisesti, mikä parantaa komentosarjan tehokkuutta, etenkin kun käsitellään I/O-sidottuja tehtäviä.

Ulkoisten komentojen suorittaminen Pythonissa on monipuolinen ja tehokas ominaisuus, joka voi parantaa merkittävästi komentosarja- ja automaatiotehtäviäsi. Käyttämällä moduulissa, voit suorittaa komentotulkkikomentoja, siepata niiden lähdöt ja käsitellä virheitä tehokkaasti. The -toiminto tarjoaa yksinkertaisemman vaihtoehdon peruskomentojen suorittamiseen. Lisäksi se sisältää moduuli varmistaa monimutkaisten komentotulkkikomentojen oikean jäsentämisen. Näiden tekniikoiden ymmärtäminen antaa sinun hyödyntää Pythonin vahvuuksia samalla kun hyödynnät käyttöjärjestelmäsi komentorivityökalujen täyden potentiaalin.