Python:当更改sys.stdin的值时,我该如何使用GNU readline



我希望我的python程序从管道中获取输入,然后从终端中获取输入。阅读此帖子后,我尝试打开/开发/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读取线不起作用。我无法使用箭头键移动光标或导航历史记录。我读到了这里提交的这个问题的补丁,但是我猜没有任何东西。

如果有一种方法可以接受管道和终端的输入而不更改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

相关内容

  • 没有找到相关文章

最新更新