programing

python 코드에서 셸 스크립트를 호출하는 방법

copysource 2022. 9. 29. 22:48
반응형

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가 변경되었기 때문에 오해를 하게 되었습니다.

외부 스크립트를 실행하는 새로운 방법은runfunction : 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

반응형