【发布时间】:2017-05-13 09:17:19
【问题描述】:
我希望我的 Python 程序从管道获取输入,然后从终端获取输入。在阅读了this SO 的帖子后,我尝试打开 /dev/tty 来替换 sys.stdin。
import sys
import readline
def tty_input(prompt):
with open("/dev/tty") as terminal:
sys.stdin = terminal
user_input = input(prompt)
sys.stdin = sys.__stdin__
return user_input
这种方法的问题是当 sys.stdin != sys.__stdin__ 时 GNU readline 不起作用。我无法使用箭头键移动光标或浏览历史记录。我读到了here 提交的针对这个问题的补丁,但我猜它没有任何结果。
如果有一种方法可以在不更改 sys.stdin 值的情况下同时接受来自管道和终端的输入,我愿意接受建议。
【问题讨论】:
-
另请参阅此错误报告:bugs.python.org/msg286521