python - Subprocess.Popen() => 无输出

标签 python subprocess stdout popen

我试图从 Python 中运行一个 Perl 脚本,但我在 stdout() 中没有得到任何输出,而当我从 shell 中运行我的脚本时,它运行良好。

首先,这是我如何从 shell 执行它(假设我在正确的目录中):

./vmlinkedclone.pl --server 192.168.20.2 --username root --password root 
--vmbase_id 2 --vm_destination_id 41 --vmname_destination "clone-41-snapname" --snapname Snapname

#=> True, []
#=> or False, and a description of the error here 
#=> or an argument error

下面是我尝试从 Python 调用它的方式:

cmd = ['/home/user/workspace/vmlinkedclone.pl', '--server', '192.168.20.2', '--username', 'root', '--password', 'root' ,'--vmbase_id', '2', '--vm_destination_id', '41', '--vmname_destination', 'clone-41-snapname', '--snapname', 'Snapname']
pipe = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
result = pipe.stdout.read()

print "Result : ",result
#=> Result :

为什么当我从 Shell 运行我的脚本时得到了想要的输出,而从 Python 中什么也得不到?

最佳答案

你能不能试试:

pipe = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)

编辑

我确实发现了一些与编码相关的问题,我通过以下方式解决了它:

import subprocess
cmd = ['/home/user/workspace/vmlinkedclone.pl', '--server', '192.168.20.2', '--username', 'root', '--password', 'root' ,'--vmbase_id', '2', '--vm_destination_id', '41', '--vmname_destination', 'clone-41-snapname', '--snapname', 'Snapname']
pipe = subprocess.Popen(cmd, shell = True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out, err = pipe.communicate()
result = out.decode()
print "Result : ",result 

关于python - Subprocess.Popen() => 无输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13451685/

相关文章:

python - 无法绘制 MAPE 和 MSE 的训练和测试值?

python - subprocess.Popen 的管道输出到文件

linux - 终止应用程序,多个嵌套子流程

ruby - FFmpeg 将 -filter_complex 与拆分过滤器一起使用时提取不同数量的帧

python - 如何在不使用 communicate() 的情况下避免子进程中的死锁

python - Keras 中 ANN 每次迭代的权重值

python - 在Python中实现欧拉方法来求解ODE

python - Google App Engine Python 中使用区域设置的货币格式

python - 命令在终端或程序(Python 和 C++)中给出不同的行为

python - python 子进程中 stdout 的损坏文件