Како извршити екстерне команде у Питхон-у

Python subprocess

Покретање системских команди из Питхон-а

Питхон пружа моћне могућности за извршавање спољних програма и системских команди директно из ваших скрипти. Ова функција вам омогућава да искористите Питхон-ову једноставност док истовремено користите предности широког спектра алата доступних у вашем оперативном систему.

Без обзира да ли аутоматизујете задатке који се понављају или интегришете сложене токове посла, разумевање како да позовете системске команде у Питхон-у може значајно да побољша вашу продуктивност. У овом водичу ћемо истражити различите методе како бисмо ово ефикасно постигли.

Цомманд Опис
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 Одређује варијабле окружења за нови процес.

Разумевање извршавања скрипте у Питхон-у

Достављене скрипте показују различите начине за извршавање спољних команди помоћу Питхон-а. Тхе команда је разноврсна и омогућава вам да покрећете команде љуске директно из ваше Питхон скрипте. На пример, штампа поруку на конзоли, док хвата излаз ls -l команду, која приказује детаљну листу директоријума. Користећи са омогућава коришћење функција љуске, као што је проширење џокер знакова, што га чини згодним за сложеније команде.

Тхе команда пружа већу контролу над извршавањем команде дозвољавајући асинхроне команде и интеракцију са улазним и излазним токовима процеса. На пример, пример скрипте са континуирано пингује локалну машину и чита сваку линију излаза. Поред тога, се користи за једноставно извршавање наредби, али му недостаје флексибилност subprocess. Променљиве окружења се могу модификовати и прослеђивати потпроцесу помоћу анд тхе параметар у , омогућавајући динамичко извршавање наредби на основу окружења.

Извршавање спољних команди у Питхон-у

Коришћење Питхоновог модула подпроцеса

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

Аутоматизација системских задатака са Питхон-ом

Коришћење модула ос.система и подпроцеса

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

Напредне технике за извршавање системских команди

Други аспект извршавања системских команди у Питхон-у укључује коришћење модул за руковање рашчлањивањем команди љуске. Овај модул пружа начин да се команде љуске поделе у формат листе, који се затим може прослеђивати функције. Ово осигурава да се аргументи са размацима правилно рукују. Поред тога, можете користити да усмери стандардне улазне, излазне и токове грешака у родитељски процес, омогућавајући сложенију међупроцесну комуникацију.

На пример, уланчавање команди и узастопна обрада њиховог излаза може се постићи преношењем излаза једне команде у другу користећи . Ово вам омогућава да креирате моћне командне секвенце сличне ономе што бисте радили у схелл скрипти. Такође можете користити да истовремено покреће више команди подпроцеса, побољшавајући ефикасност ваше скрипте, посебно када се бавите задацима везаним за У/И.

  1. Како могу да покренем команду љуске и добијем њен излаз у Питхон-у?
  2. Користите са за снимање излаза команде.
  3. Која је разлика између и ?
  4. је једноставнији интерфејс који чека да се наредба заврши, док даје већу контролу над извршавањем команде, омогућавајући асинхрони рад.
  5. Како да решим грешке приликом покретања системске команде?
  6. Користите и блокови са да ухвати и обради грешке.
  7. Могу ли да проследим променљиве окружења команди?
  8. Да, користите параметар у или да пренесе променљиве окружења.
  9. Како да покренем више команди у низу?
  10. Користите или у петљи или ланцу команди користећи цеви са .
  11. Како могу да извршим команду која захтева кориснички унос?
  12. Користите са и комуницирају са процесом користећи .
  13. Каква је корист од у извршењу команде?
  14. помаже правилно рашчлањивање команди љуске, обезбеђујући да се аргументи са размацима правилно рукују.
  15. Како да покренем команду у позадини?
  16. Користите без чекања да се процес заврши или употребе за управљање извршавањем у позадини.

Напредне технике за извршавање системских команди

Други аспект извршавања системских команди у Питхон-у укључује коришћење модул за руковање рашчлањивањем команди љуске. Овај модул пружа начин да се команде љуске поделе у формат листе, који се затим може прослеђивати функције. Ово осигурава да се аргументи са размацима правилно рукују. Поред тога, можете користити да усмери стандардне улазне, излазне и токове грешака у родитељски процес, омогућавајући сложенију међупроцесну комуникацију.

На пример, уланчавање команди и узастопна обрада њиховог излаза може се постићи преношењем излаза једне команде у другу користећи . Ово вам омогућава да креирате моћне командне секвенце сличне ономе што бисте радили у схелл скрипти. Такође можете користити да истовремено покреће више команди подпроцеса, побољшавајући ефикасност ваше скрипте, посебно када се бавите задацима везаним за У/И.

Извршавање екстерних команди у Питхон-у је разноврсна и моћна могућност која може значајно побољшати ваше задатке скриптовања и аутоматизације. Коришћењем модула, можете покренути команде љуске, ухватити њихове излазе и ефикасно руковати грешкама. Тхе функција пружа једноставнију алтернативу за извршавање основних команди. Поред тога, укључивање модул обезбеђује правилно рашчлањивање сложених команди љуске. Разумевање ових техника вам омогућава да искористите предности Питхон-а док истовремено користите пун потенцијал алата командне линије вашег оперативног система.