파이썬 코드에서 쉘 스크립트를 호출하는 방법은 무엇입니까?
파이썬 코드에서 쉘 스크립트를 호출하는 방법은 무엇입니까?
서브 프로세스 모듈은 당신을 도울 것입니다.
명백히 사소한 예 :
>>> import subprocess
>>> subprocess.call(['./test.sh']) # Thanks @Jim Dennis for suggesting the []
0
>>>
test.sh
간단한 쉘 스크립트는 어디에 있으며이 0
실행에 대한 리턴 값입니다.
os.popen()
(더 이상 사용되지 않음) 또는 전체 subprocess
모듈을 사용하는 몇 가지 방법 이 있지만 이 방법은
import os
os.system(command)
가장 쉬운 방법 중 하나입니다.
쉘 스크립트에 일부 매개 변수를 전달하려는 경우 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 하위 프로세스를 살펴 보는 것을 잊지 마십시오
스크립트에 여러 개의 인수가있는 경우
#!/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"
서브 프로세스 모듈은 서브 프로세스를 시작하기에 좋은 모듈입니다. 이를 사용하여 다음과 같이 쉘 명령을 호출 할 수 있습니다.
subprocess.call(["ls","-l"]);
#basic syntax
#subprocess.call(args, *)
If you have your script written in some .sh file or a long string, then you can use os.system module. It is fairly simple and easy to call:
import os
os.system("your command here")
# or
os.system('sh file.sh')
This command will run the script once, to completion, and block until it exits.
Subprocess is good but some people may like scriptine better. Scriptine has more high-level set of methods like shell.call(args), path.rename(new_name) and path.move(src,dst). Scriptine is based on subprocess and others.
Two drawbacks of scriptine:
- Current documentation level would be more comprehensive even though it is sufficient.
- Unlike subprocess, scriptine package is currently not installed by default.
I know this is an old question but I stumbled upon this recently and it ended up misguiding me since the Subprocess API as changed since python 3.5.
The new way to execute external scripts is with the run
function.
Import subprocess
subprocess.run(['./test.sh'])
If your shell script file does not have execute permissions, do so in the following way.
import subprocess
subprocess.run(['/bin/bash', './test.sh'])
Please Try the following codes :
Import Execute
Execute("zbx_control.sh")
참고URL : https://stackoverflow.com/questions/3777301/how-to-call-a-shell-script-from-python-code
'Programing' 카테고리의 다른 글
Xcode : 일반 언어로 된 목표와 체계는 무엇입니까? (0) | 2020.05.15 |
---|---|
중첩 된 객체를 쿼리하는 방법? (0) | 2020.05.15 |
파이썬에서 [] 연산자를 재정의하는 방법은 무엇입니까? (0) | 2020.05.14 |
C #에서 CPU 사용량을 얻는 방법? (0) | 2020.05.14 |
Swift는 respondsToSelector에 해당하는 것은 무엇입니까? (0) | 2020.05.14 |