Я делаю скрипт на Python, где мне нужно создать несколько процессов ssh-copy-id, и мне нужно, чтобы я ввел пароль, поэтому я использую PExpect.
У меня в основном это:
child = pexpect.spawn('command')
child.expect('password:')
child.sendline('the password')
и затем я хочу порождать другой процесс, мне больше не нужен этот процесс, закончился он или нет.
child = pexpect.spawn('command2')
child.expect('password:')
child.sendline('the password')
А код висит на втором "спавне"
Однако, если я закомментирую первый вызов, второй сработает, поэтому я предполагаю, что тот факт, что первый все еще работает или что-то не дает ему работать.
Теперь, другая вещь, которую я не смог сделать, это подождать, пока первая остановится.
Я пробовал:
child.close () - зависает (как с True, так и с False в качестве параметров)
child.read (-1) - висит
child.expect (pexpect.EOF) - зависает.
child.terminate () - зависает (как с True, так и с False в качестве параметров)
Есть идеи о том, что может происходить?
ПРИМЕЧАНИЕ: я не эксперт по Python и никогда раньше не использовал pexpect, поэтому ЛЮБАЯ идея приветствуется.
Спасибо!
ОБНОВЛЕНИЕ: Это определенно связано с ssh-copy-id, потому что с другими процессами spawn работает хорошо, даже если они не возвращаются.
Кроме того, очевидно, что ssh-copy-id никогда не возвращает EOF.