답변:
서브 프로세스 모듈은 당신을 도울 것입니다.
명백히 사소한 예 :
>>> import subprocess
>>> subprocess.call(['./test.sh']) # Thanks @Jim Dennis for suggesting the []
0
>>>
test.sh
간단한 쉘 스크립트는 어디에 있으며이 0
실행에 대한 리턴 값입니다.
chmod +x script.sh
. 참고 : script.sh는 스크립트의 자리 표시 자이므로 적절하게 바꿉니다.
os.popen()
(더 이상 사용되지 않음) 또는 전체 subprocess
모듈을 사용하는 몇 가지 방법 이 있지만 이 방법은
import os
os.system(command)
가장 쉬운 방법 중 하나입니다.
subprocess
당신은 입력 / 출력 / 오류 파이프를 관리 할 수 있습니다. 인수가 많은 경우에도 더 좋습니다 . 간단한 인수 목록이있는 os.command()
특수 문자를 이스케이프 처리하여 전체 명령 행을 작성해야합니다 subprocess
. 그러나 간단한 작업으로 os.command()
는 충분할 수 있습니다.
The subprocess module provides more powerful facilities for spawning new processes and retrieving their results; *using that module is preferable to using this function.*
쉘 스크립트에 일부 매개 변수를 전달하려는 경우 shlex.split () 메소드를 사용할 수 있습니다 .
import subprocess
import shlex
subprocess.call(shlex.split('./test.sh param1 param2'))
와 test.sh
같은 폴더에 :
#!/bin/sh
echo $1
echo $2
exit 0
출력 :
$ python test.py
param1
param2
import os
import sys
test.sh가 실행하려는 쉘 스크립트라고 가정
os.system("sh test.sh")
위에서 언급 한대로 서브 프로세스 모듈을 사용하십시오.
나는 이것을 다음과 같이 사용한다 :
subprocess.call(["notepad"])
파이썬 3.5를 실행 중이며 subprocess.call ([ './ test.sh'])이 작동하지 않습니다.
나는 당신이 세 가지 해결책을 당신이 출력으로하고 싶은 것에 달려 있습니다.
1-스크립트를 호출하십시오. 터미널에 출력이 표시됩니다. 출력은 숫자입니다.
import subprocess
output = subprocess.call(['test.sh'])
2-문자열에 대한 호출 및 덤프 실행 및 오류. (stdout)을 인쇄하지 않으면 터미널에서 실행이 보이지 않습니다. Shell = Popen의 인수로 True가 작동하지 않습니다.
import subprocess
from subprocess import Popen, PIPE
session = subprocess.Popen(['test.sh'], stdout=PIPE, stderr=PIPE)
stdout, stderr = session.communicate()
if stderr:
raise Exception("Error "+str(stderr))
3-스크립트를 호출하고 temp_file에서 temp.txt의 에코 명령을 덤프하십시오.
import subprocess
temp_file = open("temp.txt",'w')
subprocess.call([executable], stdout=temp_file)
with open("temp.txt",'r') as file:
output = file.read()
print(output)
doc 하위 프로세스를 살펴 보는 것을 잊지 마십시오
서브 프로세스 모듈은 서브 프로세스를 시작하기에 좋은 모듈입니다. 이를 사용하여 다음과 같이 쉘 명령을 호출 할 수 있습니다.
subprocess.call(["ls","-l"]);
#basic syntax
#subprocess.call(args, *)
당신은 그것의 문서를 볼 수 있습니다 여기에서 .
스크립트를 일부 .sh 파일이나 긴 문자열로 작성한 경우 os.system 모듈을 사용할 수 있습니다. 상당히 간단하고 전화하기 쉽습니다.
import os
os.system("your command here")
# or
os.system('sh file.sh')
이 명령은 스크립트를 한 번 실행하여 완료하고 종료 될 때까지 차단합니다.
스크립트에 여러 개의 인수가있는 경우
#!/usr/bin/python
import subprocess
output = subprocess.call(["./test.sh","xyz","1234"])
print output
출력은 상태 코드를 제공합니다. 스크립트가 성공적으로 실행되면 0이 아닌 정수가됩니다.
podname=xyz serial=1234
0
아래는 test.sh 쉘 스크립트입니다.
#!/bin/bash
podname=$1
serial=$2
echo "podname=$podname serial=$serial"
하위 프로세스는 좋지만 일부 사람들은 스크립트를 더 좋아할 수 있습니다 . Scriptine에는 shell.call (args) , path.rename (new_name) 및 path.move (src, dst) 와 같은 고급 메소드 세트가 있습니다 . 성경은 하위 프로세스 및 기타를 기반으로 합니다.
스크립트의 두 가지 단점 :
나는 이것이 오래된 질문이라는 것을 알고 있지만 최근에 이것을 우연히 발견 했으며 파이썬 3.5 이후 변경된 서브 프로세스 API 이후로 나를 잘못 안내했습니다 .
외부 스크립트를 실행하는 새로운 방법은 run
args로 설명 된 명령을 실행하는 함수를 사용하는 것입니다. 명령이 완료되기를 기다린 다음 CompletedProcess 인스턴스를 반환합니다.
import subprocess
subprocess.run(['./test.sh'])