Связь несколько раз с подпроцессом [duplicate]

этот вопрос уже есть ответ здесь:

Я пытаюсь передать ввод в программу, открытую как подпроцесс в Python. Использование communicate () делает то, что я хочу, но он делает это только один раз, а затем ждет завершения подпроцесса прежде чем позволить всему продолжаться.

есть ли метод или модуль, подобный communicate() в функции, но допускающий множественную связь с дочерним процессом?

вот пример:

import subprocess

p = subprocess.Popen('java minecraft_server.jar',
                 shell=True,
                 stdin=subprocess.PIPE);

//Pipe message to subprocess' console here

//Do other things

//Pipe another message to subprocess' console here

Если это можно сделать более простым способом без использования подпроцесса, это было бы здорово.

1 ответов


вы можете write до p.stdinflush каждый раз, чтобы убедиться, что данные действительно отправлены) столько раз, сколько вы хотите. Проблема будет только если вы хотите быть уверены, чтобы получить результаты обратно (так как это так трудно убедить других процессов не буфер их вывода!- ), но так как вы даже не устанавливаете stdout= в своем Popen класс это явно не проблема для вас. (Когда это и проблема, и вам действительно нужно, чтобы победить других стратегия буферизации выходных данных процесса,pexpect -- или wexpect на Windows -- являются лучшим решением -- я рекомендую их очень, очень часто на stackoverflow, но не имеют URL-адреса под рукой прямо сейчас, поэтому pls просто искать их самостоятельно если, вопреки вашему примеру, у вас есть, что нужно).