Я читал много документов, но до сих пор не уверен, что я делаю неправильно.Подпроцесс Python.Popen не работает
Итак, у меня есть отдельный сценарий оболочки, который запускает отдельный сервер, а затем тот, над которым я работаю. Как только сервер подключен, я хочу запустить ls, и все. Однако по какой-либо причине stdin = subprocess.PIPE препятствует завершению команды Popen, чтобы следующая строка могла выполняться. Например, потому что код застрял Я Ctrl + C, но я получу ошибку, заявив, что wait()
получил прерывание клавиатуры. Вот пример кода:
import subprocess
from time import sleep
p1 = subprocess.Popen("run_server",
stdout = subprocess.PIPE,
stdin = subprocess.PIPE)
#sleep(1)
p1.wait()
p1.communicate(input = "ls")[0]"
Если я заменяю p1.wait()
с sleep(1)
, команда communicate
мчит и отображает Л.С, но сценарий, который запускает сервер обнаруживает EOF на телетайп и прекращает его самостоятельно. У меня должно быть какое-то ожидание между Popen и общением, потому что серверный скрипт завершится по той же причине.
Действительно ли команда «run_server», что вы вложили бы в оболочку? Нет ./run_server или что-нибудь еще? – SBH
@SBHayes Да, run_server - это все. – Krin123
Хорошо, я думаю, что теперь я понимаю ваш вопрос. Когда скрипт, вызывающий Popen, завершается, он также закроет все свои дочерние процессы. Чтобы ваш сервер работал, вам нужно как-то отсоединить процесс. Возможно, двойная вилка или что-то подобное. – SBH