如何知道pexpect命令已经执行?

3

我有一个命令 @ "tool --server=commander.company.com login username",它会提示输入“密码”。我正在使用 pexpect 运行该命令,并期望通过 sendline 发送密码。运行时没有错误,但这些命令似乎没有运行。我如何知道这实际上已经运行了?

child = pexpect.spawn ('tool --server=commander.company.com login username')
child.expect('Password:')
child.sendline('#password')
2个回答

2

child.isalive()child.status对于确定命令的执行状态非常有用,然而,pexpect.spawn也可以传递一个打开的文件来记录输入和输出。这样,您就可以看到生成的进程是否按照您的预期执行,例如:

import sys
child = pexpect.spawn('tool --server=commander.company.com login username', logfile=sys.stdout)
child.expect('Password:')
child.sendline('#password')

这将把所有输入和输出发送到您的标准输出流。 logfile_readlogfile_send 也可能会有用。

0

这里有两件可能需要检查的事情:

  • p.isalive()
isalive(self) 方法是 pexpect.spawn 实例的一个方法,用于测试子进程是否正在运行。该方法是非阻塞的。如果子进程已经终止,则该方法将读取子进程的退出状态或信号状态。如果子进程似乎正在运行,则返回 True,否则返回 False。在 Solaris 上,可能需要几秒钟才能返回正确的状态。
  • p.status

例子:

>>> from pexpect import spawn
>>> p = spawn("ls")
>>> p.isalive()
False
>>> p.status
0

更多详情请参见:pexpect文档


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接