2016-12-29 5 views
5

私はPythonプログラムがパイプから入力を受け取り、後で端末から入力を受けたいと思っています。 this SOの記事を読んだ後、sys.stdinを置き換えるために/ dev/ttyを開いてみました。Python:sys.stdinの値が変更された場合、どのようにGNU readlineを使用できますか?

このアプローチの問題は、sys.stdin!= sys .__ stdin__のときにGNU readlineが機能しなくなることです。矢印キーを使ってカーソルを移動したり、履歴をナビゲートすることはできません。私はhereと提出されたこの非常に問題のパッチを読んだが、私はそれが何も来ていないと推測している。

sys.stdinの値を変更せずにパイプと端末の両方から入力を受け入れる方法がある場合は、私は提案をすることができます。

+0

も参照してください。このバグレポート:http://bugs.python.org/msg286521 – src

答えて

0

私は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 
関連する問題