gpt4 book ai didi

Python:更改 sys.stdin 的值后如何使用 GNU readline?

转载 作者:太空狗 更新时间:2023-10-30 01:32:29 25 4
gpt4 key购买 nike

我希望我的 Python 程序从管道获取输入,然后再从终端获取输入。看完this因此,我尝试打开/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 的值的情况下接受来自管道和终端的输入,我愿意接受建议。

最佳答案

我敢打赌,sys.stdinsys.__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

关于Python:更改 sys.stdin 的值后如何使用 GNU readline?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41373065/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com