Пользовательский стандартный ввод для подпроцесса python - PullRequest
2 голосов
/ 16 сентября 2010

Я запускаю процесс SSH, как это:

sshproc = subprocess.Popen([command], shell=True)
exit = os.waitpid(sshproc.pid, 0)[1]

Это работает и открывает интерактивный терминал.Основываясь на документации для subprocess, sshproc использует сценарий sys.stdin.

Вопрос: как мне распечатать в stderr или файл, какие входные данные принимаютсяк этому дочернему процессу?Я создаю API ведения журнала и в настоящее время теряю возможность записывать, какие команды выполняются в этом сеансе SSH.

Мне не нужен ответ, просто подталкивание в правильном направлении.

Спасибо всем!

РЕДАКТИРОВАТЬ: Важно, чтобы я запустил процесс, как показано выше, чтобы я мог провести интерактивный сеанс SSH с моим пользователем.Например, я не могу использовать communicate(), насколько я знаю.

1 Ответ

7 голосов
/ 16 сентября 2010
sshproc = subprocess.Popen([command],
                        shell=True,
                        stdin=subprocess.PIPE,
                        stdout=subprocess.PIPE,
                        stderr=subprocess.PIPE,
                        )

stdout_value, stderr_value = sshproc.communicate('through stdin to stdout')
print repr(stdout_value)
print repr(stderr_value)

А, так как вы сказали, что подтолкнете в правильном направлении, я подумал, что должен показать вам хорошие показания:

-

...