作为我的延续上一个问题在 pexpect 中构建交互式选项菜单时,交互输入过滤器中的打印语句只有在交互完成后才会发送到 stdout。
该文档似乎没有包含与 Expect 中的 send_user 等效的方法,是否有任何解决方法可以将输出发送给用户,而不是从 pexpect 的交互方法中生成的子级?
bash-4.1$ cat testInputFilter.py
import pexpect
def input_filter(s):
if s == b'\003':
print('you pushed ctrl+c')
return b'\r: r u going to kill me? press ctrl-d to exit!\r'
elif s == b'\004':
print('you pushed ctrl+d')
return b'\r: ok, bye; exit\r'
else:
return s
proc = pexpect.spawn('bash --norc')
proc.interact(input_filter=input_filter)
proc.expect(pexpect.EOF)
bash-4.1$ ~/python/python36/bin/python3.6 testInputFilter.py | tee inputTest.txt
bash-4.1$
bash-4.1$ : r u going to kill me? press ctrl-d to exit!
bash-4.1$
bash-4.1$ : ok, bye; exit
exit
you pushed ctrl+c
you pushed ctrl+d
bash-4.1$
真的不知道为什么print()
'ed 数据不会自动flush与交互时编辑spawn埃德孩子但你可以flush它明确地显示,所以它会实时显示:
print('something')
sys.stdout.flush()
或者直接使用(仅适用于 python3)
# .raw is not buffered
sys.stdout.buffer.raw.write('something')
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)