Как заставить мое приложение на Python ждать определенного подпроцесса, прежде чем продолжить - PullRequest
3 голосов
/ 19 февраля 2012

Я порождаю ssh процесс в моем скрипте Python, например:

env = {'SSH_ASKPASS':'/home/max/repo/vssh/vssh/vssh.py', 'DISPLAY':':123'}
for x in sessions:
    current_session = Popen(["ssh", x.address],
                            stdin=PIPE,
                            stdout=PIPE,
                            stderr=None,
                            shell=False,
                            env=env,
                            preexec_fn=os.setsid)

Проблема в том, что мой скрипт запускает подпроцесс, а затем продолжает работать.ssh требует ввода пароля, который я пытаюсь перенаправить на STDOUT / STDIN моего скрипта.За исключением того, что к тому времени, когда он запрашивает мой пароль, мой сценарий завершен.

Как я могу остановить свой сценарий, пока я не введу пароль и не установлю соединение успешно через ssh?

1 Ответ

3 голосов
/ 19 февраля 2012

Если это действительно чтение из стандартного ввода, тогда вы можете использовать метод связи .Но запросы пароля часто обходят стандартный ввод и связываются с управляющим терминалом, и в этом случае вам нужно что-то вроде pexpect .

Возможно, вы захотите изучить модули SSH для Python, которые должны быть проще иболее надежный, чем управление подпроцессом.

...