Man*_*dan 230
该子模块将帮助你.
公然琐碎的例子:
>>> import subprocess
>>> subprocess.call(['./test.sh']) # Thanks @Jim Dennis for suggesting the []
0
>>>
Run Code Online (Sandbox Code Playgroud)
哪个test.sh
是简单的shell脚本,并且0
是此运行的返回值.
Mic*_*las 92
有一些方法可以使用os.popen()
(已弃用)或整个subprocess
模块,但这种方法
import os
os.system(command)
Run Code Online (Sandbox Code Playgroud)
是最简单的之一.
Fra*_*urt 41
如果要将一些参数传递给shell脚本,可以使用方法shlex.split():
import subprocess
import shlex
subprocess.call(shlex.split('./test.sh param1 param2'))
Run Code Online (Sandbox Code Playgroud)
与test.sh
在同一文件夹中:
#!/bin/sh
echo $1
echo $2
exit 0
Run Code Online (Sandbox Code Playgroud)
输出:
$ python test.py
param1
param2
Run Code Online (Sandbox Code Playgroud)
Sra*_*rta 20
import os
import sys
Run Code Online (Sandbox Code Playgroud)
假设test.sh是您想要执行的shell脚本
os.system("sh test.sh")
Run Code Online (Sandbox Code Playgroud)
hug*_*o24 15
使用上面提到的子进程模块.
我这样使用它:
subprocess.call(["notepad"])
Run Code Online (Sandbox Code Playgroud)
小智 13
我正在运行python 3.5和subprocess.call(['./ test.sh'])对我不起作用.
我给你三个解决方案取决于你想要的输出.
1 - 调用脚本.您将在终端中看到输出.输出是一个数字.
import subprocess
output = subprocess.call(['test.sh'])
Run Code Online (Sandbox Code Playgroud)
2 - 调用并转储执行和错误到字符串.除非打印(stdout),否则在终端中看不到执行.Shell = True,因为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))
Run Code Online (Sandbox Code Playgroud)
3 - 调用脚本并在temp_file中转储temp.txt的echo命令
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)
Run Code Online (Sandbox Code Playgroud)
不要忘记查看doc子流程
我知道这是一个老问题,但我最近偶然发现了这个问题,它最终误导了我,因为Subprocess API 自 python 3.5 以来发生了变化。
执行外部脚本的新方法是使用run
函数,它运行由 args 描述的命令。等待命令完成,然后返回 CompletedProcess 实例。
import subprocess
subprocess.run(['./test.sh'])
Run Code Online (Sandbox Code Playgroud)
如果脚本有多个参数
#!/usr/bin/python
import subprocess
output = subprocess.call(["./test.sh","xyz","1234"])
print output
Run Code Online (Sandbox Code Playgroud)
输出将给出状态代码。如果脚本成功运行,它将给出 0 否则为非零整数。
podname=xyz serial=1234
0
Run Code Online (Sandbox Code Playgroud)
下面是 test.sh shell 脚本。
#!/bin/bash
podname=$1
serial=$2
echo "podname=$podname serial=$serial"
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
304627 次 |
最近记录: |