我有这个调用shell脚本并处理输出的python脚本。
$ cat cd-and-run.py
#!/usr/bin/env python
import sys, getopt
import subprocess
def run_mock_phantom (test_value):
aid = 'unknown'
proc = subprocess.Popen(['./mock-phanton.sh', test_value], stdout=subprocess.PIPE)
for line in proc.communicate()[0]:
print line
return aid
def main(argv):
app_id = run_mock_phantom ( 'test-one-two' )
print "app is %s" % (app_id)
if __name__ == "__main__":
main(sys.argv[1:])
以下是上面脚本调用的shell脚本:
$ cat mock-phanton.sh
#!/bin/sh
appid=$1
if [ -z $appid ]
then
echo "oh man you didnt do it right ..."
exit 0
fi
echo "APP_ID=$appid"
当我运行脚本时,我得到了这个输出:
$ ./cd-and-run.py
A
P
P
_
I
D
=
t
e
s
t
-
o
n
e
-
t
w
o
app is unknown
我不明白的是为什么每个角色都是在另一条线上输出而不仅仅是......
APP_ID=test-one-two
答案 0 :(得分:3)
尝试更改此内容:
for line in proc.communicate()[0]:
print line
到此:
print proc.communicate()[0]
我认为你无意中迭代了一个字符串。
修改强>
如this question中所述,您可以遍历proc.communicate()[0].splitlines()
多行stdout。也许更简洁的方法是这样的,在same question:
for line in proc.stdout:
print line