Как передать команду ‘QUIT’ уже запущенному подпроцессу python

#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 для изящного завершения работы.