У меня есть два простых программ:Python Popen STDIN PIPE получает spamed
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 содержит:
Wh y делает test.sh получать последние 8 строк? Он должен застрять и ждать ввода. Но, по-видимому, Popen spams «\ n» однажды написал что-то, и Python выйдет.
Я не могу найти исправление для этого, используя proc.stdin.flush() и proc.stdin.close() не приносит пользы. Как я могу это предотвратить?
О, теперь я понимаю! Это как чтение из пустого файла. Благодаря! – ThinkChaos
Спасибо за редактирование с помощью нового кода, но я в ситуации, когда я взаимодействую с внешней программой (приложение java), и я не могу просто изменить исходный текст для работы, как будто мне это нужно, Я должен адаптироваться. – ThinkChaos