Как постоянно общаться с тем же процессом с Python Popen()

Я новичок в этом так надеюсь, что вы понимаете…

Теперь я использую модуль подпроцесса python для отправки конкретной команды.

После того, как я отправлю command1 с функцией Popen, я хотел бы отправить command2 для того же процесса еще один.

Это возможно…?

// Example
// command1 -> Opening command for text program.
// command2 -> Executing the write and save command.(on above text program) 

popen = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
// next....?

пожалуйста, дайте мне знать, если я понимаю это неправильно.

2 ответа

  1. Это вполне выполнимо, но вы, возможно, захотите взглянуть на что-то вроде pexpectтого, что предлагает больше контроля над диалогом.

    cmd = subprocess.Popen(['command1'], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)  # no shell=True here!
    stdout, stderr = cmd.communicate('command2')
    

    Это предполагает, что command1будет продолжать работать и читать дополнительные команды на его стандартном входе.

  2. Проверить это.
    В unix мы можем выполнять несколько команд за один раз, как

    cmd_1;cmd_2
    

    Мы будем использовать то же самое с подпроцессом.

    Обязательно используйте shell=True.

    import subprocess
    all_cmd = "echo a;echo b;echo c"
    
    p = subprocess.Popen(all_cmd,stdout=subprocess.PIPE, shell=True)
    p_stdout,p_err = p.communicate()
    print p_stdout.strip()