Python 3.x 无限循环之前的popen_spawn expect

Python 3.x 无限循环之前的popen_spawn expect,python-3.x,windows,loops,pexpect,Python 3.x,Windows,Loops,Pexpect,不幸的是,我的任务是为运行在windows上的python编写单元测试。我无法访问容器,必须处理与windows本身的交互。我正在运行Python 3.9 我正在使用pexpect.popen_spawn生成为其编写测试的子python脚本,并使用expect方法读取子python脚本的标准输出 当我测试一个正常运行和终止的脚本时,我正在使它按预期工作,如下所示 child = popen_spawn.PopenSpawn(['python.exe','test.py'],encoding='u

不幸的是,我的任务是为运行在windows上的python编写单元测试。我无法访问容器,必须处理与windows本身的交互。我正在运行Python 3.9

我正在使用pexpect.popen_spawn生成为其编写测试的子python脚本,并使用expect方法读取子python脚本的标准输出

当我测试一个正常运行和终止的脚本时,我正在使它按预期工作,如下所示

child = popen_spawn.PopenSpawn(['python.exe','test.py'],encoding='utf-8')
child.logfile = sys.stdout

child.expect('foo')
child.expect(pexpect.EOF)
这里的test.py只有一行

print('foo')
然而,当test.py包含一个无限循环时,就像我计划在测试时使用的脚本一样,子项上的expect在默认的30秒窗口中无法匹配。新的problamatic test.py如下所示:

import time

print('foo')
while(True):
    time.sleep(1)
child = popen_spawn.PopenSpawn(['python.exe','test.py'],encoding='utf-8')
child.logfile = sys.stdout

child.expect('foo')
child.kill(signal.CTRL_C_EVENT)
对测试脚本的修改如下:

import time

print('foo')
while(True):
    time.sleep(1)
child = popen_spawn.PopenSpawn(['python.exe','test.py'],encoding='utf-8')
child.logfile = sys.stdout

child.expect('foo')
child.kill(signal.CTRL_C_EVENT)
不知何故,循环阻止了popen_spawn读取子进程的标准输出,我不知道为什么