drb*_*sen 1 python subprocess wrapper
我真的遇到了一个问题,我希望有人可以帮助我。我正在尝试在 Python3.1 中为名为 的命令行程序创建一个包装器spooky。我可以在命令行上成功运行该程序,如下所示:
$ spooky -a 4 -b .97
Run Code Online (Sandbox Code Playgroud)
我对 spooky 的第一次 Python 包装尝试如下所示:
import subprocess
start = "4"
end = ".97"
spooky_path = '/Users/path/to/spooky'
cmd = [spooky_path, '-a', start, '-b', end]
process = subprocess.Popen(cmd, stdout=subprocess.PIPE)
process.wait()
print('Done')
Run Code Online (Sandbox Code Playgroud)
上面的代码打印Done,但不执行程序spooky
接下来我尝试在命令行上执行该程序,如下所示:
$ /Users/path/to/spooky -a 4 -b .97
Run Code Online (Sandbox Code Playgroud)
上面的代码也失败了,并且没有提供任何有用的错误。
我的问题是:如何通过发送spooky -a 4 -b .97到命令行让Python运行这个程序?我非常感谢您能提供的任何帮助。提前致谢。
小智 5
您需要删除 stdout=subprocess.PIPE。这样做会断开进程的标准输出与 Python 的标准输出的连接,并使其可以使用 Popen.communicate() 函数检索,如下所示:
import subprocess
spooky_path = 'ls'
cmd = [spooky_path, '-l']
process = subprocess.Popen(cmd, stdout=subprocess.PIPE)
output = process.communicate()[0]
print "Output:", output
process.wait()
print('Done')
Run Code Online (Sandbox Code Playgroud)
要使其直接打印,您可以在不使用 stdout 参数的情况下使用它:
process = subprocess.Popen(cmd)
Run Code Online (Sandbox Code Playgroud)
或者您可以使用调用功能:
process = subprocess.call(cmd)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7103 次 |
| 最近记录: |