Gar*_*ett 5 python stdin readline tty
我希望我的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
Run Code Online (Sandbox Code Playgroud)
这种方法的问题是当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
Run Code Online (Sandbox Code Playgroud)
或者复印一份
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
171 次 |
| 最近记录: |