#python #subprocess
#python #подпроцесс
Вопрос:
Я использую python, вызываю подпроцесс и считываю put построчно, и он работает нормально, как показано ниже.
process = subprocess.Popen(['jdebu&', 'File.t&z'],
stdout=subprocess.PIPE,
universal_newlines=True)
while True:
output = process.stdout.readline()
print(output.strip())
return_code = process.poll()
print( return_code)
if "lastdata" in str(output): <- How to send 'bt' and 'quit' command at this point and read the response back.
process.communicate('bt')
process.communicate('quit')
if return_code is not None:
# Process has finished, read rest of the output
for output in process.stdout.readlines():
print(output.strip())
break
Я хочу выдать команду ‘bt’ и «quit» процессу «jdebu&», когда выполняется указанное выше условие, чтобы завершить процесс. Поскольку процесс jdebu& не возвращает управление обратно, и программе python необходимо явно выполнить команду ‘Quit’, чтобы вернуть управление обратно.
Хотите знать, как это сделать?
Я отправляю это значение: process.stdin.write(‘bt n’) process.stdin.write(‘quit n’)
Ответ №1:
# write on the stdin out of your process
subprocess.stdin.write('QUIT')
Комментарии:
1. На самом деле я хочу отправить строку ‘quit’ в качестве входных данных для процесса.
2. Скорее всего, вам понадобится символ новой строки в конце этой команды.
3. Должен быть subprocess.stdin.write вместо process.stdin — Также stdin=подпроцесс. Требуется канал?
4. Спасибо, я обновил вопрос для лучшего разъяснения.
Ответ №2:
Вы можете просто завершить процесс, вот так
process.kill()
Комментарии:
1. Мне не очень нравится завершать процесс жестким способом. Мне нужно отправить команду quit для изящного завершения работы.