Python에서의 Bash 명령어 실행
로컬 머신에서 이 행을 포함하는 python 스크립트를 실행합니다.
bashCommand = "cwm --rdf test.rdf --ntriples > test.nt"
os.system(bashCommand)
이거 잘 돼.
그런 다음 서버에서 동일한 코드를 실행하면 다음 오류 메시지가 나타납니다.
'import site' failed; use -v for traceback
Traceback (most recent call last):
File "/usr/bin/cwm", line 48, in <module>
from swap import diag
ImportError: No module named swap
뭘요, 이렇게 요.print bashCommand됩니다.os.system().
.os.system(bashCommand)이 에러가 발생하기 전에, 커맨드를 단말기에 인쇄합니다.그런 다음 출력을 복사하고 단말기에 복사 붙여넣기를 한 다음 Enter 키를 누르면 작동됩니다.
무슨 일인지 아는 사람 있어?
마세요os.system하위 프로세스로 인해 폐지되었습니다.문서 내용: "이 모듈은 몇 가지 오래된 모듈 및 기능을 교체하려고 합니다.os.system,os.spawn
고객님의 경우와 같습니다.
import subprocess
bashCommand = "cwm --rdf test.rdf --ntriples > test.nt"
process = subprocess.Popen(bashCommand.split(), stdout=subprocess.PIPE)
output, error = process.communicate()
앞서 말한 답변에 대해 조금 더 자세히 설명하자면, 일반적으로 간과되는 몇 가지 세부 사항이 있습니다.
subprocess.run()에 걸쳐서subprocess.check_call()over고 over oversubprocess.call()에 걸쳐서subprocess.Popen()에 걸쳐서os.system()에 걸쳐서os.popen()- 하여 할 수 있습니다.
text=True, displacesuniversal_newlines=True. - 의
shell=True★★★★★★★★★★★★★★★★★」shell=False견적을 어떻게 바꾸는지, 그리고 셸의 편리함을 이용할 수 있는지 등입니다. - 을
shBash ★★★★★ - 하위 프로세스가 상위 프로세스와 분리되어 있고 일반적으로 상위 프로세스를 변경할 수 없는 방법을 이해합니다.
- Python의 하위 프로세스로 Python 인터프리터를 실행하지 마십시오.
이러한 토픽에 대해서는, 이하에 자세하게 설명합니다.
subprocess.run() ★★★★★★★★★★★★★★★★★」subprocess.check_call()
subprocess.Popen()함수는 낮은 수준의 작업이지만 올바르게 사용하기 어렵고 여러 줄의 코드를 복사/붙여넣게 됩니다.다양한 목적을 위한 고급 래퍼 기능 집합으로 표준 라이브러리에 편리하게 이미 존재하며, 다음에 더 자세히 나와 있습니다.
다음은 설명서의 한 단락입니다.
를 기동하기 는, 「」를 하는 합니다.
run()처리할 수 있는 모든 사용 사례에 적용됩니다.보다 예에서는, 이 되는 「Da Knowledge Knowledge Knowledge Case」를해 주세요.Popen이치노
유감스럽게도 이러한 래퍼 기능의 가용성은 Python 버전에 따라 다릅니다.
subprocess.run()Python 3.5 python python python python python python 。다음 사항을 모두 대체하기 위한 것입니다.subprocess.check_output()는 Python7/3되었습니다.1번지은 기본적으로는 그은은entententententententententententententent에 합니다.subprocess.run(..., check=True, stdout=subprocess.PIPE).stdoutsubprocess.check_call()Python 2.5 python python python python python python python python python python python python python python.은 기본적으로는 그은은entententententententententententententent에 합니다.subprocess.run(..., check=True)subprocess.call()Python에서 Python 2.4로 되었습니다.subprocess모듈(PEP-324).그것은 기본적으로 와 동등하다.subprocess.run(...).returncode
vs "API"subprocess.Popen()
및 " " "subprocess.run()는 기존 기존 기능보다 논리적이고 다용도적입니다.종료 상태, 표준 출력 및 완료된 하위 프로세스에서 몇 가지 다른 결과 및 상태 표시기를 가져올 수 있는 다양한 메서드를 가진 개체를 반환합니다.
subprocess.run()프로그램을 실행하여 Python에 제어권을 반환해야 할 경우 이 방법을 사용합니다. 관련성이 높은 시나리오(I/하는 경우)에는, 「」( 「Python」, 「Python」의 「I/O」를 사용할 .subprocess.Popen()배관을 직접 관리할 수 있게 해 주세요이를 위해서는 모든 가동 부품을 상당히 복잡하게 이해해야 하며 가볍게 다루어서는 안 됩니다.더 단순한 개체는 하위 프로세스의 남은 수명 동안 코드로부터 관리해야 하는 (가능성이 있는) 프로세스를 나타냅니다.
해야 할 은 단지 '그냥'이라는 이다.subprocess.Popen()단지 과정을 만들 뿐이다.그대로 두면 Python과 동시에 실행되는 서브프로세스가 있기 때문에 "백그라운드" 프로세스입니다.입력이나 출력을 할 필요가 없다면 Python 프로그램과 병행하여 유용한 작업을 할 수 있습니다.
os.system() ★★★★★★★★★★★★★★★★★」os.popen()
영원할 때부터(음, Python 2.5 이후) 모듈 문서에는 권장 사항이 포함되어 있습니다.subprocess에 걸쳐서os.system():
subprocess하기 위한 보다 보다 이 하는 것이 .이 기능을 사용하는 것보다 해당 모듈을 사용하는 것이 좋습니다.
「 」의 system()시스템에 의존하며 하위 프로세스와 상호작용할 수 있는 방법을 제공하지 않는다는 것입니다.Python의 도달 범위 밖에서 표준 출력과 표준 오류가 발생하면서 단순히 실행됩니다.Python이 받는 유일한 정보는 명령어의 종료 상태입니다(제로가 아닌 값의 의미도 시스템에 따라 다소 의존하지만 0은 성공을 의미합니다).
PEP-324(상기 기재)에는 그 이유에 대한 보다 상세한 근거가 포함되어 있습니다.os.system또, 「」가 어떻게 되어 있는지는,subprocess이치노
os.popen()훨씬 더 강하게 낙담하곤 했다.
버전 2.6 이후 권장되지 않음: 이 기능은 사용되지 않습니다.를 사용합니다.
subprocess★★★★★★ 。
에서는 Python 3의 어느 Python 3의 사용법, Python 3의 사용법, Python 3의 사용법, Python 3의 만을 재실장하고 있습니다.subprocess 합니다.subprocess.Popen()★★★★★★★★★★★★★★★★★★★★★★★★★★★★.
사용하다check=True
'아까보다'라는 것도 수 거예요.subprocess.call() has has of has has has has has has has has has has has has has와 같은 제한이 많다.와 같은 .os.system(). 으로 종료되었는지 subprocess.check_call() ★★★★★★★★★★★★★★★★★」subprocess.check_output() 출력도 합니다).do(완료된 서브프로세스의 표준 도 반환합니다.마찬가지로, 보통 다음과 같이 사용해야 합니다.check=Truesubprocess.run()특히 하위 프로세스가 오류 상태를 반환하도록 허용할 필요가 없는 한.
「」를 사용하고 .check=True ★★★★★★★★★★★★★★★★★」subprocess.check_*하위 프로세스가 0이 아닌 종료 상태를 반환할 경우 Python은 예외를 발생시킵니다.
「」의입니다.subprocess.run()check=True하위 프로세스가 실패하면 다운스트림 코드가 실패하면 깜짝 놀랄 수 있습니다.
「」의 인 .check_call() ★★★★★★★★★★★★★★★★★」check_output()되었을 때, 예를 '', '예외조항', '예외조항', '예외조항', '예외조항', '예외조항', '예외조항', '예외조항', '예외조항', '예외조항', '', '', '예외조항' 등입니다.grep하는 것을 ( 당신은 교환해야 할 것입니다.)grep파이썬
모든 것을 고려하면 셸 명령어가 종료 코드를 반환하는 방법 및 어떤 조건에서 제로 이외의(에러) 종료 코드를 반환하는지 이해하고 처리 방법을 의식적으로 결정해야 합니다.
하여 할 수 있습니다.text=True a a a auniversal_newlines=True
Python 3 이후 Python 내부 문자열은 Unicode 문자열입니다.그러나 하위 프로세스가 Unicode 출력 또는 문자열을 생성한다는 보장은 없습니다.
(당장 차이가 명확하지 않다면 네드 바첼더의 실용적 유니코드를 읽을 것을 권장합니다.링크의 배후에 36분간의 비디오 프레젠테이션을 준비하고 있습니다만, 직접 페이지를 읽는 시간은 큰폭으로 단축할 수 있습니다.
내심 Python을 .bytes버퍼링하고 해석할 수 있습니다.만약 바이너리 데이터 덩어리가 포함되어 있다면, 유니코드 문자열로 디코딩해서는 안 됩니다.왜냐하면 이는 오류가 발생하기 쉽고 버그를 유발하는 동작이기 때문입니다.이것은 인코딩된 텍스트와 바이너리 데이터를 적절히 구별하는 방법이 있기 전에 많은 Python 2 스크립트를 혼란스럽게 하는 일종의 성가신 동작입니다.
★★★★★★★★★★★★★★★★ text=TruePython에게 실제로 시스템의 기본 인코딩으로 텍스트 데이터가 돌아오기를 기대하며 Python(Unicode) 문자열로 디코딩되어야 한다고 말합니다(Windows를 제외한 어느 정도의 최신 시스템에서는 보통 UTF-8이 사용 가능합니까?).
요청하신 내용이 아닐 경우 Python이 바로 알려드립니다.bytes의 stdout ★★★★★★★★★★★★★★★★★」stderr줄들.나중에 보면 텍스트 문자열이라는 걸 알 수 있고 인코딩도 알 수 있습니다.그런 다음 해독할 수 있습니다.
normal = subprocess.run([external, arg],
stdout=subprocess.PIPE, stderr=subprocess.PIPE,
check=True,
text=True)
print(normal.stdout)
convoluted = subprocess.run([external, arg],
stdout=subprocess.PIPE, stderr=subprocess.PIPE,
check=True)
# You have to know (or guess) the encoding
print(convoluted.stdout.decode('utf-8'))
3.하기 쉬운 별칭인 Python 3.7을 했습니다.text에는 의 소지가 있는 universal_newlines.
shell=True »shell=False
★★★★★★★★★★★★★★★★ shell=True하나의 끈을 껍데기에 전달하면 껍데기가 그 끈을 가져갑니다.
★★★★★★★★★★★★★★★★ shell=False셸을 바이패스하고 인수 목록을 OS에 전달합니다.
셸이 없는 경우 프로세스를 저장하고 버그나 보안 문제를 안고 있을 수도 있고 안고 있지 않을 수도 있는 상당히 많은 숨겨진 복잡성을 제거합니다.
반면 셸이 없는 경우 리디렉션, 와일드카드 확장, 작업 제어 및 기타 많은 셸 기능이 없습니다.
흔히 있는 실수는 다음을 사용하는 것입니다.shell=TruePython에게 토큰 목록을 전달하거나 그 반대로 전달합니다.이것은 경우에 따라서는 동작하지만, 실제로는 불명확하고, 흥미로운 방법으로 망가질 가능성이 있습니다.
# XXX AVOID THIS BUG
buggy = subprocess.run('dig +short stackoverflow.com')
# XXX AVOID THIS BUG TOO
broken = subprocess.run(['dig', '+short', 'stackoverflow.com'],
shell=True)
# XXX DEFINITELY AVOID THIS
pathological = subprocess.run(['dig +short stackoverflow.com'],
shell=True)
correct = subprocess.run(['dig', '+short', 'stackoverflow.com'],
# Probably don't forget these, too
check=True, text=True)
# XXX Probably better avoid shell=True
# but this is nominally correct
fixed_but_fugly = subprocess.run('dig +short stackoverflow.com',
shell=True,
# Probably don't forget these, too
check=True, text=True)
"하지만 나에게 효과가 있다"는 일반적인 반박은 어떤 상황에서 효과가 멈출 수 있는지 정확히 이해하지 못하면 유용한 반박이 아닙니다.
간단히 요약하면 올바른 사용법은 다음과 같습니다.
subprocess.run("string for 'the shell' to parse", shell=True)
# or
subprocess.run(["list", "of", "tokenized strings"]) # shell=False
토큰 이 너무 에는 에 주의해 .shlex.split()해 줄 수 있어요
subprocess.run(shlex.split("no string for 'the shell' to parse")) # shell=False
# equivalent to
# subprocess.run(["no", "string", "for", "the shell", "to", "parse"])
의 「」split()여기서 작동하지 않습니다.왜냐하면 견적을 보존하지 않기 때문입니다.에서는 어떻게 해야 하는지 주목해 ."the shell"을 사용하다
리팩터링 예시
셸의 기능은 네이티브 Python 코드로 대체되는 경우가 많습니다. 또는 심플 Awksed파이톤
이것을 부분적으로 설명하기 위해서, 많은 셸 기능을 수반하는, 일반적인, 그러나 약간 바보 같은 예를 다음에 나타냅니다.
cmd = '''while read -r x;
do ping -c 3 "$x" | grep 'min/avg/max'
done <hosts.txt'''
# Trivial but horrible
results = subprocess.run(
cmd, shell=True, universal_newlines=True, check=True)
print(results.stdout)
# Reimplement with shell=False
with open('hosts.txt') as hosts:
for host in hosts:
host = host.rstrip('\n') # drop newline
ping = subprocess.run(
['ping', '-c', '3', host],
text=True,
stdout=subprocess.PIPE,
check=True)
for line in ping.stdout.split('\n'):
if 'min/avg/max' in line:
print('{}: {}'.format(host, line))
여기서 주의할 점은 다음과 같습니다.
- ★★★★★★★★★★★★★★★★
shell=False껍데기에 줄에 붙이는 인용문은 필요 없습니다.어쨌든 따옴표를 넣는 것은 아마 오류일 것입니다. - 하위 프로세스에서 가능한 한 적은 수의 코드를 실행하는 것이 좋습니다.이를 통해 Python 코드 내에서 실행을 보다 효과적으로 제어할 수 있습니다.
- 하지만 복잡한 셸 파이프라인은 지루하고 때로는 파이썬에 재실장하기 어렵다.
또한 리팩터링된 코드는 셸이 실제로 얼마나 간단한 구문(좋은지 나쁜지)을 통해 사용자에게 얼마나 도움이 되는지 보여줍니다.Python은 명시적인 것이 암묵적인 것보다 낫다고 말하지만 Python 코드는 다소 장황하고 실제보다 복잡해 보인다.한편, 호스트명을 shell 명령 출력과 함께 간단하게 포함할 수 있는 확장 기능 등, 다른 조작의 중간에 컨트롤 할 수 있는 포인트가 다수 준비되어 있습니다.(이것은 셸에서도 결코 어려운 일이 아닙니다만, 또 다른 전환이나 다른 프로세스를 희생하고 있습니다.
공통 셸 구조
여기에서는 이러한 셸 기능에 대한 간단한 설명과 네이티브 Python 설비로 대체 가능한 방법에 대해 설명합니다.
- 은, 「Wildcard expansion」은 「Wildcard expansion」으로 할 수 있습니다.
glob.glob()파이썬 와 같은 간단한 스트링 비교로 됩니다.for file in os.listdir('.'): if not file.endswith('.png'): continueBash와 같은 다양한 시설을 가지고 있다..{png,jpg}과 " " " " 입니다.{1..100}확장(칠데 확장도 있습니다.~디렉토리로 되며, 일반적으로는 홈 디렉토리로 확장됩니다.~account다른 사용자의 홈디렉토리로 이동합니다. - (예: 음음 like like like like like like like like)
$SHELL★★★★★★★★★★★★★★★★★」$my_exported_var파이썬 셸 는 예를 .D"와 같이 할 수 있습니다.os.environ['SHELL'])export변수를 서브프로세스에서 사용할 수 있도록 하는 것입니다.서브프로세스에서 사용할 수 없는 변수는 셸의 서브프로세스로 실행되는 Python에서는 사용할 수 없습니다.또는 그 반대도 마찬가지입니다.env=에서 ""로subprocessmethods를 사용하면 하위 프로세스의 환경을 사전으로 정의할 수 있습니다.그러면 Python 변수를 하위 프로세스에 표시할 수 있습니다.★★★★★★★★★★★★★★★★shell=False따옴표를 를 들어, 따옴표를 삭제하는 방법은 다음과 같습니다.cd "$HOME"os.chdir(os.environ['HOME'])빈번히cd는 유용하지도 않고 필요하지도 않으며, 많은 초보자들이 변수 주위에 큰따옴표를 생략하고 어느 날까지 빠져나갑니다...) - 리디렉션을 사용하면 파일에서 표준 입력으로 읽고 표준 출력을 파일에 쓸 수 있습니다.
grep 'foo' <inputfile >outputfileoutputfile과 쓰 writing writing forinputfile그 합니다.grep그 ,, 준 , then then then then then , , , , , , , , , , , , , , , , ,.outputfile이것은 일반적으로 네이티브 Python 코드로 대체하는 것은 어렵지 않습니다. - 파이프라인은 리다이렉션의 한 형태입니다.
echo foo | nl는 2개의 서 표준 출력은 2개의 입니다.여기서 표준 출력은echo는 표준 입니다.nl(OS 레벨에서는 Unix와 같은 시스템에서는, 이것은 1개의 파일 핸들입니다.파이프라인의 한쪽 또는 양쪽 끝을 네이티브 Python 코드로 대체할 수 없다면, 특히 파이프라인이 두세 개 이상의 프로세스를 가지고 있는 경우 셸을 사용하는 것을 고려해 보십시오(Python 표준 라이브러리의 모듈이나 보다 현대적이고 다재다능한 타사 타사 모듈을 살펴보십시오). - 작업 제어를 사용하면 작업을 중단하거나 백그라운드에서 실행하거나 포그라운드로 되돌릴 수 있습니다.프로세스를 정지하고 계속하기 위한 기본적인 Unix 신호도 물론 Python에서 이용할 수 있습니다.그러나 작업은 Python에서 이와 같은 작업을 수행할 경우 이해해야 하는 프로세스 그룹 등을 포함하는 셸의 상위 수준의 추상화입니다.
- 모든 것이 기본적으로 문자열이라는 것을 이해할 때까지 셸에서 인용하는 것은 혼란스러울 수 있습니다.그렇게
ls -l /'ls' '-l' '/'하지만 리터럴에 대한 인용은 전적으로 선택 사항입니다.셸 메타 문자를 포함하는 따옴표가 없는 문자열은 파라미터 확장, 공백 토큰화 및 와일드카드 확장을 수행합니다.큰따옴표는 공백 토큰화와 와일드카드 확장을 방지하지만 파라미터 확장(변수 치환, 명령어 치환 및 백슬래시 처리)을 허용합니다.이것은 이론적으로는 간단하지만, 특히 여러 층의 해석(예를 들어 원격 셸 명령)이 있는 경우에는 혼란스러울 수 있습니다.
을 sh Bash ★★★★★
subprocess는 셸 를 셸 명령어로 합니다./bin/sh하지 않는 에서는 「」( 「Windows」)의 값을 합니다).COMSPEC변수).즉, 어레이 등 다양한 Bash 전용 기능을 사용할 수 없습니다.
구문을 해야 할 를 Bash로 할 수 .executable='/bin/bash'(물론 Bash가 다른 곳에 설치되어 있는 경우에는 경로를 조정해야 합니다).
subprocess.run('''
# This for loop syntax is Bash only
for((i=1;i<=$#;i++)); do
# Arrays are Bash-only
array[i]+=123
done''',
shell=True, check=True,
executable='/bin/bash')
A subprocess할 수 없습니다.
다소 흔한 실수는 다음과 같은 일을 하는 것이다.
subprocess.run('cd /tmp', shell=True)
subprocess.run('pwd', shell=True) # Oops, doesn't print /tmp
첫 번째 서브프로세스가 환경변수를 설정하려고 해도 같은 일이 발생합니다.다른 서브프로세스를 실행하면 당연히 이 변수는 사라집니다.
자처리는 Python과는 완전히 분리되어 실행되며, 종료 시 Python은 종료 상태 및 자처리의 출력에서 추론할 수 있는 모호한 표시와는 별도로 무엇을 했는지 알 수 없습니다.일반적으로 자녀는 부모의 환경을 변경할 수 없습니다.변수를 설정하거나 작업 디렉토리를 변경하거나 부모의 협조 없이는 부모와 통신할 수 없습니다.
이 경우 즉시 수정은 두 명령어를 모두 단일 하위 프로세스로 실행하는 것입니다.
subprocess.run('cd /tmp; pwd', shell=True)
사례는 유용하지 이 사용 를 사용하십시오.★★★★★★★★★★★★★★★★★★,cwd인수 """를 지정합니다.os.chdir()변수현재 그 )의 환경을 조작할 수 .
os.environ['foo'] = 'bar'
또는 환경 설정을 하위 프로세스로 전달합니다.
subprocess.run('echo "$foo"', shell=True, env={'foo': 'bar'})
것도 없고)subprocess.run(['echo', 'bar']);;;;;;;;;;;;;;;;;;echo물론 처음부터 하위 프로세스에서 실행하는 것은 좋지 않은 예입니다.)
Python에서 Python 실행 안 함
이것은 약간 의심스러운 조언입니다. Python 스크립트의 하위 프로세스로서 Python 인터프리터를 실행하는 것이 타당하거나 심지어 절대적인 요건인 상황도 있습니다. 매우 올바른 '아주 많은 경우입니다.import다른 Python 모듈을 호출 스크립트에 삽입하여 함수를 직접 호출합니다.
다른 Python 스크립트가 고객님의 관리 하에 있고 모듈이 아닌 경우 하나의 스크립트로 전환하는 것을 고려해 주십시오(이 답변은 이미 너무 길기 때문에 자세한 내용은 여기에서 설명하지 않겠습니다).
병렬 처리가 필요한 경우 모듈을 사용하여 하위 프로세스에서 Python 함수를 실행할 수 있습니다.또한 단일 프로세스에서 여러 태스크를 실행할 수 있습니다(이는 보다 가볍고 제어가 용이하지만 프로세스 내의 스레드는 긴밀하게 결합되어 있으며 단일 GIL에 바인딩되어 있습니다).
서브프로세스를 사용하여 호출
import subprocess
subprocess.Popen("cwm --rdf test.rdf --ntriples > test.nt")
서버에 스왑 모듈이 없기 때문에 발생하는 오류인 것 같습니다.서버에 스왑 모듈을 설치한 후 스크립트를 다시 실행해야 합니다.
명령어를 실행하기 위해 파라미터 -c와 함께 bash 프로그램을 사용할 수 있습니다.
bashCommand = "cwm --rdf test.rdf --ntriples > test.nt"
output = subprocess.check_output(['bash','-c', bashCommand])
하시면 됩니다.subprocess하지만 나는 항상 그것이 '피토닉' 방식이 아니라고 느꼈다.그래서 명령줄 기능을 쉽게 실행할 수 있는 Sultan(쉐임리스 플러그)을 만들었습니다.
https://github.com/aeroxis/sultan
os.popen'도 사용할 수 있습니다.예:
import os
command = os.popen('ls -al')
print(command.read())
print(command.close())
출력:
total 16
drwxr-xr-x 2 root root 4096 ago 13 21:53 .
drwxr-xr-x 4 root root 4096 ago 13 01:50 ..
-rw-r--r-- 1 root root 1278 ago 13 21:12 bot.py
-rw-r--r-- 1 root root 77 ago 13 21:53 test.py
None
오류로 인해 서버에 swap이라는 이름의 패키지가 없습니다.이것./usr/bin/cwm에 계신 우분투/데비안을 설치해주세요.python-swap적성을 이용해서.
셸 없이 명령어를 실행하려면 명령어를 목록으로 전달하고 다음을 사용하여 Python에서 리다이렉션을 구현합니다.
#!/usr/bin/env python
import subprocess
with open('test.nt', 'wb', 0) as file:
subprocess.check_call("cwm --rdf test.rdf --ntriples".split(),
stdout=file)
:: " " "> test.nt마지막에. stdout=file는 리다이렉션을 실장합니다.
Python에서 셸을 사용하여 명령을 실행하려면 명령어를 문자열로 전달하고 활성화하십시오.shell=True:
#!/usr/bin/env python
import subprocess
subprocess.check_call("cwm --rdf test.rdf --ntriples > test.nt",
shell=True)
리다이렉트을 리다이렉트하는 셸)가.> test.nt명령어에 있습니다).
bashism을 사용하는 bash 명령을 실행하려면 bash 실행 파일을 명시적으로 지정합니다.예를 들어 bash 프로세스 치환을 에뮬레이트합니다.
#!/usr/bin/env python
import subprocess
subprocess.check_call('program <(command) <(another-command)',
shell=True, executable='/bin/bash')
subprocess.Popen()os.system()이치노 「」를 는, 「」를 참조해당됩니다.subprocess.Popen() 장황하거나peasyshellPython의 bash.
https://github.com/davidohana/peasyshell
이것을 하는 버마적인 방법은
subprocess.Popen는 첫 번째 요소가 실행되는 명령어이고 그 뒤에 명령줄 인수가 표시됩니다.
예를 들어 다음과 같습니다.
import subprocess
args = ['echo', 'Hello!']
subprocess.Popen(args) // same as running `echo Hello!` on cmd line
args2 = ['echo', '-v', '"Hello Again"']
subprocess.Popen(args2) // same as running 'echo -v "Hello Again!"` on cmd line
복사 붙여넣기:
def run_bash_command(cmd: str) -> Any:
import subprocess
process = subprocess.Popen(cmd.split(), stdout=subprocess.PIPE)
output, error = process.communicate()
if error:
raise Exception(error)
else:
return output
언급URL : https://stackoverflow.com/questions/4256107/running-bash-commands-in-python
'programing' 카테고리의 다른 글
| 행잉 포인터와 메모리 누수의 차이 (0) | 2022.12.24 |
|---|---|
| URL 및 파일 이름을 안전하게 하기 위해 문자열을 삭제하시겠습니까? (0) | 2022.12.24 |
| 클론 방식을 올바르게 재정의하려면 어떻게 해야 합니다. (0) | 2022.12.24 |
| str==의 차이점은 무엇입니까?C의 특수 및 str[0]=='\0'은 무엇입니까? (0) | 2022.12.24 |
| 엔티티 프레임워크가 "같은 키를 가진 항목이 이미 추가되었습니다"를 슬로우합니다. (0) | 2022.12.24 |