簡體   English   中英

Python:當sys.stdin的值被更改時,如何使用GNU readline?

[英]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.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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM