Python peexpect等价于Expect';s";发送“U用户”;

Python peexpect等价于Expect';s";发送“U用户”;,python,expect,pexpect,Python,Expect,Pexpect,作为我在pexpect中构建交互选项菜单的延续,交互输入过滤器中的打印语句直到交互完成后才会发送到stdout 文档似乎不包含从expect发送给用户的等效方法,是否存在将输出发送给用户,而不是从pexpect的Interactive方法中发送给派生子级的解决方法 bash-4.1$ cat testInputFilter.py import pexpect def input_filter(s): if s == b'\003': print('you pushed

作为我在pexpect中构建交互选项菜单的延续,交互输入过滤器中的打印语句直到交互完成后才会发送到stdout

文档似乎不包含从expect发送给用户的等效方法,是否存在将输出发送给用户,而不是从pexpect的Interactive方法中发送给派生子级的解决方法

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()
“生成的数据不会自动刷新,但您可以显式刷新它,以便它实时显示:

print('something')
sys.stdout.flush()
或仅使用(仅适用于python3)


我发现在屏幕上打印会产生一个奇怪的偏移量,这个偏移量基于派生进程之前打印出来的内容,派生进程下一个输出也会产生一个奇怪的偏移量。我最后做的是:

    sys.stdout.write(f'\n\rsomething\r\n')
    sys.stdout.flush()

这将在新行的开头打印我的
某物
,然后在下一行的开头开始生成的进程输出。

如果你不
| tee inputest.txt
?好吧,这样做了,我觉得很愚蠢,但我觉得奇怪,tee不应该重定向到stdout和文件?这不是全部目的吗?我想我只能用记录器了。
    sys.stdout.write(f'\n\rsomething\r\n')
    sys.stdout.flush()