3

pexpect.spawn对象在expect(或interact,send等)被调用之前是否处于非活动状态,或者被调用的进程是否立即启动?例如:

import pexpect
process = pexpect.spawn("echo HELLO")
print ("Process created? Or run?")
process.expect("HELLO")

print语句发生时,pexpect已经在后台运行了 echo 命令并且只是推迟让它返回,直到expect处理调用?还是在第一次致电或类似情况echo之前没有发生任何事情(尚未运行) ?expect

干杯

4

1 回答 1

3

当传递一个命令时,pexpect.spawn()立即分叉并调用该命令。您示例中的 echo 命令已经运行。

这在spawn构造函数文档中有所暗示:

这是构造函数。命令参数可以是一个字符串,包括命令和命令的任何参数。例如::

child = pexpect.spawn ('/usr/bin/ftp')
child = pexpect.spawn ('/usr/bin/ssh user@example.com')
child = pexpect.spawn ('ls -latr /tmp')

您也可以使用如下参数列表构造它:

child = pexpect.spawn ('/usr/bin/ftp', [])
child = pexpect.spawn ('/usr/bin/ssh', ['user@example.com'])
child = pexpect.spawn ('ls', ['-latr', '/tmp'])

在此之后,子应用程序将被创建并准备好与之交谈。

我已经通过查看源代码确认了这一点;构造函数调用_spawn(),记录如下:

这将在子进程中启动给定的命令。这为 pty 做了所有的 fork/exec 类型的东西。这是由 调用的__init__。如果 args 为空,则将解析命令(按空格分割),并将 args 设置为已解析的参数。

于 2012-09-06T15:17:34.817 回答