Я выполняю скрипт Python, где мне нужно создать несколько процессов ssh-copy-id, и им нужно, чтобы я вводил пароль , поэтому я использую PExpect.Pexpect, работает ssh-copy-id висит при попытке вызвать второй процесс
У меня есть в основном это:
child = pexpect.spawn('command')
child.expect('password:')
child.sendline('the password')
, а затем я хочу, чтобы породить другой процесс, я не забочусь об этом один больше, закончился ли он или нет.
child = pexpect.spawn('command2')
child.expect('password:')
child.sendline('the password')
И код висит на втором «отродье»
Однако, если я закомментировать первый звонок, второй один работает, поэтому я предполагаю, что тот факт, что первый из них является все еще работает или что-то удерживает его от работы.
Теперь, еще одна вещь, которую я не смог сделать, это подождать, пока первый не остановится. Я пробовал:
child.close() - он висит (как с истинными и ложными в качестве параметров) child.read (-1) - он висит
child.expect (pexpect.EOF) - он висит.
child.terminate() - он висит (оба с параметрами True и False как параметры)
Любые идеи о том, что может произойти?
ПРИМЕЧАНИЕ: Я не эксперт Python, и я никогда раньше не использовал pexpect, поэтому ЛЮБАЯ идея более чем приветствуется.
Спасибо!
UPDATE: Это, безусловно, связано с SSH-копия-ID, потому что с другими процессами, икру работает хорошо, даже если они не вернутся. Кроме того, очевидно, что ssh-copy-id никогда не возвращает EOF.
@ DanialMagliola У вас есть идеальное решение для этого? – Nilesh 2011-12-21 10:31:57
Следуя советам http://linux.byexamples.com/archives/346/python-how-to-access-ssh-with-pexpect/, он работает для меня, добавляя `` `` child.expect (pexpect.EOF) `` `после отправки пароля – 2016-09-22 13:07:40