python 코드에서 셸 스크립트를 호출하는 방법
python 코드에서 셸 스크립트를 호출하는 방법
하위 프로세스 모듈이 도움이 됩니다.
노골적으로 사소한 예:
>>> import subprocess
>>> subprocess.call(['sh', './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
가정 테스트sh는 실행하는 셸 스크립트입니다.
os.system("sh test.sh")
위와 같이 하위 프로세스 모듈을 사용합니다.
이렇게 씁니다.
subprocess.call(["notepad"])
python 3.5를 실행하고 있는데 subprocess.call(['/test.sh')이 작동하지 않습니다.
출력으로 무엇을 하고 싶은지에 따라 세 가지 해결책이 있습니다.
1 - 콜 스크립트단말기에 출력이 표시됩니다.output은 숫자입니다.
import subprocess
output = subprocess.call(['test.sh'])
2 - 호출 및 덤프 실행과 에러를 문자열로 덤프합니다.인쇄(stdout)하지 않으면 단말기에 실행이 표시되지 않습니다.Shell=Popen에서 True as true as popen 인수가 통하지 않습니다.
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의 echo 명령을 덤프합니다.temp_file의 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)
문서 서브프로세스를 확인하는 것을 잊지 마세요.
오래된 질문인 것은 알지만, 최근 우연히 알게 되었고, python 3.5 이후 Subprocess API가 변경되었기 때문에 오해를 하게 되었습니다.
외부 스크립트를 실행하는 새로운 방법은run
function : arg에서 기술된 명령어를 실행합니다.명령이 완료될 때까지 기다린 다음 CompletedProcess 인스턴스를 반환합니다.
import subprocess
subprocess.run(['./test.sh'])
스크립트에 여러 개의 인수가 있는 경우
#!/usr/bin/python
import subprocess
output = subprocess.call(["./test.sh","xyz","1234"])
print output
출력에 상태 코드가 표시됩니다.스크립트가 정상적으로 실행되면 0 이외의 정수가 됩니다.
podname=xyz serial=1234
0
다음은 테스트입니다.sh shell 스크립트
#!/bin/bash
podname=$1
serial=$2
echo "podname=$podname serial=$serial"
하위 프로세스 모듈은 하위 프로세스를 시작하기 위한 좋은 모듈입니다.다음과 같이 셸 명령어를 호출할 수 있습니다.
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')
이 명령어는 스크립트를 한 번 실행하여 완료하고 종료될 때까지 차단합니다.
셸 스크립트 파일에 실행 권한이 없는 경우 다음 방법으로 실행합니다.
import subprocess
subprocess.run(['/bin/bash', './test.sh'])
서브프로세스도 좋지만 스크립트를 더 좋아하는 사람도 있을 수 있습니다.Scriptine에는 shell.call(args), path.rename(new_name), path.move(src,dst) 등의 상위 수준의 메서드 세트가 있습니다.Scriptine은 하위 프로세스 및 기타 프로세스를 기반으로 합니다.
스크립트라인의 두 가지 단점:
- 현재 문서 수준은 충분하지만 더 포괄적입니다.
- 하위 프로세스와 달리 스크립트 패키지는 현재 기본적으로 설치되지 않았습니다.
다음 코드를 사용해 보십시오.
Import Execute
Execute("zbx_control.sh")
언급URL : https://stackoverflow.com/questions/3777301/how-to-call-a-shell-script-from-python-code
'programing' 카테고리의 다른 글
MySQL에서 초기값과 자동증가를 설정하는 방법은 무엇입니까? (0) | 2022.09.29 |
---|---|
스토어드 프로시저를 사용하여 합산, 그룹화 및 다른 표에 삽입하기 (0) | 2022.09.29 |
팬더에서 공백 값(공백)을 NaN으로 대체 (0) | 2022.09.29 |
ajax의 시간 초과 설정(jQuery) (0) | 2022.09.29 |
matplotlib를 사용하여 while loop에서 실시간 플롯을 작성하려면 어떻게 해야 합니까? (0) | 2022.09.29 |