python - pexpect 相当于 Expect 的 "send_user"

标签 python expect pexpect

作为我的 previous question 的延续在 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()的数据在与spawned的 child 交互时不会自动刷新,但是你可以显式刷新它,以便实时显示:

print('something')
sys.stdout.flush()

或者直接使用(仅适用于 python3)

# .raw is not buffered
sys.stdout.buffer.raw.write('something')

关于python - pexpect 相当于 Expect 的 "send_user",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49069887/

相关文章:

python - pexpect - 无法运行示例,不断收到 AttributeError : 'module' object has no attribute 'spawn'

Python pexpect 脚本运行无误,但输出文件中没有输出

python - 如何为 Airflow 任务生成不同的 ID?

python - 如何使用SQLAlchemy在SQLite上创建全文检索索引并进行查询?

linux - 期望脚本+如果没有出现如何忽略字符串

python - 无法在cygwin中使用python的pexpect

python - 在 python 中将 tesseract 3.02 的 C API 与 ctypes 和 cv2 结合使用

python - 启动创建的 virtualenv 实例时出现问题

linux - 获取一行用户输入,然后将其作为 Bash 命令执行

linux - "command not found"shell脚本执行的expect脚本错误