0
私はシェルスクリプトを呼び出して出力を処理するこのpythonスクリプトを持っています。ここで出力が1行につき1文字になるのはなぜですか?
$ 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:])
上記のスクリプトを呼び出すシェルスクリプトです:
$ 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
?私はあなたが意図せずに文字列を反復処理していると思います
print proc.communicate()[0]
:これまで
for line in proc.communicate()[0]:
print line
:
'ラインのproc.communicateで()[0]'行を反復しません。 'proc.communicate()[0]'は文字列です。文字列を反復処理すると、文字を繰り返し処理します。 – user2357112
Doh!ありがとう!私はそこに[0]が見えなかった。 –
'[0]'を削除しても、行間を反復させることはありません。 – user2357112