Programing

파이썬 코드에서 쉘 스크립트를 호출하는 방법은 무엇입니까?

crosscheck 2020. 5. 15. 20:50
반응형

파이썬 코드에서 쉘 스크립트를 호출하는 방법은 무엇입니까?


파이썬 코드에서 쉘 스크립트를 호출하는 방법은 무엇입니까?


서브 프로세스 모듈은 당신을 도울 것입니다.

명백히 사소한 예 :

>>> 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

반응형