Python 스크립트에서 bash 명령을 실행하는 방법

Python 스크립트에서 bash 명령을 실행하는 방법

sudo apt updatePython 스크립트에서 여러 인수(예: "")를 사용하여 bash 명령을 시작하는 방법은 무엇입니까 ?

답변1

@milne의 답변은 효과가 있지만 subprocess.call()피드백은 거의 제공되지 않습니다.

subprocess.check_output()나는 stdout에 인쇄된 내용을 분석할 수 있도록 다음 을 사용하는 것을 선호합니다 .

 import subprocess
 res = subprocess.check_output(["sudo", "apt", "update"])
 for line in res.splitlines():
     # process the output line by line

check_output명령 호출이 0으로 종료되면 오류가 발생합니다.

bash함수에 키워드 인수를 지정하지 않으면 이는 호출이나 다른 셸을 호출하지 않습니다 (Call the command shell의 경우에도 마찬가지입니다subprocess.call()

Python에서 (다른) 명령 호출을 많이 하는 경우 다음을 살펴보는 것이 좋습니다.선두. 이렇게 하면 (IMO) 더 읽기 쉽게 됩니다.

from plumbum.cmd import sudo, apt, echo, cut

res = sudo[apt["update"]]()
chain = echo["hello"] | cut["-c", "2-"]
chain()

답변2

bash를 프로그램으로 사용하고 -c 매개변수를 사용하여 명령을 실행할 수 있습니다.

예:

bashCommand = "sudo apt update"
output = subprocess.check_output(['bash','-c', bashCommand])

답변3

이것하위 프로세스모듈은 다음을 수행하도록 설계되었습니다.

import subprocess
subprocess.call(["sudo", "apt", "update"])

명령이 실패할 때 스크립트를 종료하려면 check_call()반환 코드를 직접 구문 분석하는 대신 다음을 사용하는 것이 좋습니다.

subprocess.check_call(["sudo", "apt", "update"])

답변4

Python 3.5 이상의 경우 다음을 사용할 수 있습니다.

import subprocess

try:        
    result = subprocess.run("sudo apt update", check=True, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
except subprocess.CalledProcessError as err:
    raise Exception(str(err.stderr.decode("utf-8")))
except Exception as err:
    raise Exception(err)
else:
    return result.stdout.decode("utf-8")

관련 정보