当调用pexpect.spawn时,生成的程序的执行是否立即开始?

时间:2012-09-06 15:06:52

标签: python pexpect

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

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

print语句出现时,pexpect已经在封面下运行了echo命令,只是暂时让它返回,直到expect调用处理完毕?或者在第一次调用echo或类似内容之前没有发生任何事情(expect尚未运行)?

干杯

1 个答案:

答案 0 :(得分:3)

传递命令时,pexpect.spawn()会立即调用该命令。您的示例中的echo命令已经运行。

这隐含在spawn constructor documentation

  

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

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

您也可以使用so ::

之类的参数列表构建它
child = pexpect.spawn ('/usr/bin/ftp', [])
child = pexpect.spawn ('/usr/bin/ssh', ['user@example.com'])
child = pexpect.spawn ('ls', ['-latr', '/tmp'])
     

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

我通过查看source code确认了这一点;构造函数调用_spawn(),其记录如下:

  

这将在子进程中启动给定命令。这样做可以做到   fork / exec类型的东西为pty。这由__init__调用。如果args   是空的然后命令将被解析(在空格上拆分)和args将是   设置为解析参数。