如何知道pexpect命令是否真正执行?

3 投票
2 回答
3572 浏览
提问于 2025-04-18 07:21

我有一个命令 @ "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_readlogfile_send 也可能会很有用。

撰写回答