![](/img/trans.png)
[英]Python DeBugger in Ubuntu: How to use PDB when you have sys.stdin in your Python code?
[英]Python: How can I use GNU readline when the value of sys.stdin has been changed?
我希望我的Python程序从管道中获取输入,然后从终端获取输入。 阅读此 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不起作用。 我无法使用箭头键移动光标或导航历史记录。 我读到了这里提交的这个问题的补丁,但我猜测没有任何结果。
如果有办法接受来自管道和终端的输入而不改变sys.stdin的值,我愿意接受建议。
我敢打赌, sys.stdin
和sys.__stdin__
不是你认为的那样。 在重新分配它之前,我会保存原始的sys.stdin。
import sys
import readline
def tty_input(prompt):
oldStdin = sys.stdin
with open("/dev/tty") as terminal:
sys.stdin = terminal
user_input = input(prompt)
sys.stdin = oldStdin
return user_input
或者复制一份
import sys
import readline
import copy
def tty_input(prompt):
oldStdin = copy.copy(sys.stdin)
with open("/dev/tty") as terminal:
sys.stdin = terminal
user_input = input(prompt)
sys.stdin = oldStdin
return user_input
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.