如何知道pexpect命令是否真正执行?
我有一个命令 @ "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 个回答
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 文档
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_read
和 logfile_send
也可能会很有用。