检索从python子进程运行的bash文件的输出

时间:2017-06-21 06:58:15

标签: python-3.x subprocess popen

我必须通过python为Django webapp项目运行一个bash文件,但我无法检索bash文件的输出(我真的需要它,因为它需要在网页上显示)。这是代码:

在我的python文件中:

import subprocess 


output = subprocess.Popen(['bash', 'countingbash.sh', "hello", "world"])
print (output)

in countingbash.sh:

#!/bin/sh
file="$@"
for f in $file
    do
    echo "Argument is $f"

done

我需要捕获输出,因为它需要稍后在网页中显示。如果我运行.py文件,我得到的输出不是运行bash文件的输出。输出如下:

<subprocess.Popen object at 0x102cab290>

应该是:

Argument is hello
Argument is world

如果我单独运行文件而不编写print(输出),编辑器会显示输出,但我如何捕获它?

1 个答案:

答案 0 :(得分:1)

这个修改应该给你正确的输出,我已经打开了stdout管道并从二进制字符串转换了shell输出。我使用了绝对路径来避免任何工作目录问题:

output = subprocess.Popen(['bash', '/home/demo/test.sh', "hello", "world"], stdout=subprocess.PIPE)
print (output.communicate()[0].decode('ascii'))