我真的遇到了一个问题,我希望有人可以帮助我。我正在尝试在Python3.1中为名为spooky
的命令行程序创建一个包装器。我可以在命令行上成功运行这个程序,如下所示:
$ spooky -a 4 -b .97
我第一次使用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')
以上代码打印Done
,但不执行程序spooky
接下来,我尝试在命令行上执行程序,如下所示:
$ /Users/path/to/spooky -a 4 -b .97
上述代码也失败了,并没有提供任何有用的错误。
我的问题是:如何通过将spooky -a 4 -b .97
发送到命令行来让Python运行此程序?我非常感谢您提供的任何帮助。提前谢谢。
答案 0 :(得分:3)
您需要删除stdout = subprocess.PIPE。这样做会将进程的stdout与Python的stdout断开连接,并使用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')
要使其直接打印,您可以在没有stdout参数的情况下使用它:
process = subprocess.Popen(cmd)
或者您可以使用通话功能:
process = subprocess.call(cmd)
答案 1 :(得分:0)
尝试将命令转换为单个字符串:
cmd = 'spooky_path -a start -b end'
process = subprocess.Popen(cmd, shell=True)