我正在编写一个 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')
并且代码挂在第二个“spawn”
但是,如果我注释掉第一个电话,第二个电话有效,所以我猜测第一个电话仍在运行或某些东西使其无法正常工作。
现在,我无法做的另一件事是等到第一个停止。我试过:
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。