[PYTHON] 서브 프로세스로 여러 개의 bash 명령 실행하기
PYTHON서브 프로세스로 여러 개의 bash 명령 실행하기
echo a를 실행하면; echo b bash에서 결과는 두 명령이 모두 실행된다는 것입니다. 그러나 하위 프로세스를 사용하면 첫 번째 명령이 실행되어 나머지 줄 전체가 인쇄됩니다. 아래에있는 코드는 에코입니다. b 대신에 echo b를 사용하면 두 명령을 모두 실행시킬 수 있습니까?
import subprocess, shlex
def subprocess_cmd(command):
process = subprocess.Popen(shlex.split(command), stdout=subprocess.PIPE)
proc_stdout = process.communicate()[0].strip()
print proc_stdout
subprocess_cmd("echo a; echo b")
해결법
-
==============================
1.하위 프로세스에서는 shell = True를 사용해야하고 shlex.split는 사용하지 않아야합니다.
하위 프로세스에서는 shell = True를 사용해야하고 shlex.split는 사용하지 않아야합니다.
def subprocess_cmd(command): process = subprocess.Popen(command,stdout=subprocess.PIPE, shell=True) proc_stdout = process.communicate()[0].strip() print proc_stdout subprocess_cmd('echo a; echo b')
보고:
a b
-
==============================
2.방금 python 안에서 bash 코드 (세미콜론으로 구분하지 않음)를 여러 줄 실행해야하는 상황에 걸려 넘어졌습니다. 이 시나리오에서는 제안 된 솔루션이 도움이되지 않습니다. 한 가지 방법은 파일을 저장 한 다음 Popen으로 실행하는 것이지만 내 상황에서는 불가능합니다.
방금 python 안에서 bash 코드 (세미콜론으로 구분하지 않음)를 여러 줄 실행해야하는 상황에 걸려 넘어졌습니다. 이 시나리오에서는 제안 된 솔루션이 도움이되지 않습니다. 한 가지 방법은 파일을 저장 한 다음 Popen으로 실행하는 것이지만 내 상황에서는 불가능합니다.
내가 뭘했는지는 다음과 같습니다.
commands = ''' echo "a" echo "b" echo "c" echo "d" ''' process = subprocess.Popen('/bin/bash', stdin=subprocess.PIPE, stdout=subprocess.PIPE) out, err = process.communicate(commands) print out
그래서 나는 먼저 자식 bash 프로세스를 생성 한 후 실행을 지시합니다. 이 방법은 Popen 생성자에 직접 명령을 전달하는 제한을 없애줍니다.
-
==============================
3."&&"를 사용하여 명령을 결합하십시오.
"&&"를 사용하여 명령을 결합하십시오.
os.system('echo a > outputa.txt && echo b > outputb.txt')
-
==============================
4.한 번에 명령 만 실행하는 경우 subprocess.check_output 편의 함수를 사용할 수 있습니다.
한 번에 명령 만 실행하는 경우 subprocess.check_output 편의 함수를 사용할 수 있습니다.
def subprocess_cmd(command): output = subprocess.check_output(command, shell=True) print output
-
==============================
5.
>>> command = "echo a; echo b" >>> shlex.split(command); ['echo', 'a; echo', 'b']
그래서 문제는 shlex 모듈이 ";"처리하지 못합니다.
from https://stackoverflow.com/questions/17742789/running-multiple-bash-commands-with-subprocess by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] python의 로깅 모듈을 사용하여 모든 예외 및 오류 기록 (0) | 2018.10.20 |
---|---|
[PYTHON] 사전 목록 반복 (0) | 2018.10.20 |
[PYTHON] dict_keys, dict_items 및 dict_values는 무엇입니까? (0) | 2018.10.20 |
[PYTHON] 파이 게임에 투명한 직사각형을 그립니다. (0) | 2018.10.20 |
[PYTHON] urllib2를 사용하는 모듈을 단위 테스트하려면 어떻게합니까? (0) | 2018.10.20 |