Python 스크립트에서 셸 명령을 실행하고 종료를 기다린 후 스크립트로 돌아갑니다.
dir의 모든 파일에 대해 셸 명령을 시작해야하는 파이썬 스크립트가 있습니다.
import os
files = os.listdir(".")
for f in files:
os.execlp("myscript", "myscript", f)
이것은 첫 번째 파일에서 잘 작동하지만 "myscript"명령이 종료 된 후 실행이 중지되고 python 스크립트로 돌아 오지 않습니다.
어떻게 할 수 있습니까? 내가해야합니까 fork()
전에 calling os.execlp()
?
하위 프로세스 :이
subprocess
모듈을 사용하면 새 프로세스를 생성하고 입력 / 출력 / 오류 파이프에 연결하고 반환 코드를 얻을 수 있습니다.
http://docs.python.org/library/subprocess.html
용법:
import subprocess
process = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE)
process.wait()
print process.returncode
사용할 수 있습니다 subprocess.Popen
. 몇 가지 방법이 있습니다.
import subprocess
cmd = ['/run/myscript', '--arg', 'value']
p = subprocess.Popen(cmd, stdout=subprocess.PIPE)
for line in p.stdout:
print line
p.wait()
print p.returncode
또는 외부 프로그램이 실제로 무엇을하는지 신경 쓰지 않는다면 :
cmd = ['/run/myscript', '--arg', 'value']
subprocess.Popen(cmd).wait()
서브 프로세스 모듈은 특히 2008 년부터 길을 따라왔다 check_call
과 check_output
더 쉽게 간단한 서브 프로세스 물건을합니다. check_*
기능의 제품군은 뭔가 잘못되면 그들은 예외를 발생하는 것이 그것을 좋은입니다.
import os
import subprocess
files = os.listdir('.')
for f in files:
subprocess.check_call( [ 'myscript', f ] )
에서 생성 된 모든 출력 myscript
은 프로세스가 출력을 생성 한 것처럼 표시됩니다 (기술적으로 myscript
및 Python 스크립트는 동일한 표준 출력을 공유 함). 이를 방지하는 몇 가지 방법이 있습니다.
check_call( [ 'myscript', f ], stdout=subprocess.PIPE )
stdout은 억제됩니다 (myscript
4k 이상의 출력을 생성하는 경우주의 ). 옵션을 추가하지 않으면 stderr이 계속 표시됩니다stderr=subprocess.PIPE
.check_output( [ 'myscript', f ] )
check_output
stdout을 문자열로 반환하므로 표시되지 않습니다. 옵션을 추가하지 않으면 stderr이 계속 표시됩니다stderr=subprocess.STDOUT
.
이 os.exec*()
기능 은 현재 프로그램을 새 프로그램으로 대체 합니다. 이 프로그램이 종료되면 프로세스도 종료됩니다. 당신은 아마 원할 것입니다 os.system()
.
스폰 사용
import os
os.spawnlp(os.P_WAIT, 'cp', 'cp', 'index.html', '/dev/null')
나는 os.system을 사용합니다.
import os
os.system("pdftoppm -png {} {}".format(path2pdf, os.path.join(tmpdirname, "temp")))
이것은 나를 위해 잘 작동했습니다!
shell_command = "ls -l" subprocess.call(shell_command.split())
'IT TIP' 카테고리의 다른 글
무엇입니까? : Kotlin에서 수행합니까? (0) | 2020.12.26 |
---|---|
주어진 횟수만큼 다른 문자열을 반복하여 NSString 만들기 (0) | 2020.12.26 |
헤더없이 (반복적 인 함수 선언) C ++ 코드를 작성할 수 있습니까? (0) | 2020.12.26 |
응용 프로그램 스레드를 안전하게 만드는 방법은 무엇입니까? (0) | 2020.12.25 |
다른 버전의 NodeJS 설치 (0) | 2020.12.25 |