私は2つの簡単なプログラムを持っています:
test.sh
rm ~/out.txt
for ((i=0; i<10; i++)); do
read j
echo "read: '$j'" >> ~/out.txt
done
そしてtest.py
import sub
process
proc = subprocess.Popen('/Users/plg/test.sh', stdin=subprocess.PIPE)
proc.stdin.write('1\n')
proc.stdin.write('2\n')
test.py (Python 2.7.2 を使用) を実行すると、 ~/out.txt には次の内容が含まれます。
read: '1'
read: '2'
read: ''
read: ''
read: ''
...
test.sh が最後の 8 行を受け取るのはなぜですか? スタックして入力を待つ必要があります。しかし、どうやら、私が何かを書いて Python が終了すると、Popen は '\n' をスパムします。
proc.stdin.flush() と proc.stdin.close() を使用しても何の効果もありません。これを防ぐにはどうすればよいですか?