我必须通过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(输出),编辑器会显示输出,但我如何捕获它?
答案 0 :(得分:1)
这个修改应该给你正确的输出,我已经打开了stdout管道并从二进制字符串转换了shell输出。我使用了绝对路径来避免任何工作目录问题:
output = subprocess.Popen(['bash', '/home/demo/test.sh', "hello", "world"], stdout=subprocess.PIPE)
print (output.communicate()[0].decode('ascii'))