2016-12-29 35 views
5

Python programımın bir borudan girdi almasını ve daha sonra terminalden girdi almasını istiyorum. this SO mesajını okuduktan sonra, sys.stdin'i değiştirmek için/dev/tty açmayı denedim.Python: sys.stdin değeri değiştiğinde GNU okuma hattını nasıl kullanabilirim?

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 

Bu yaklaşımdaki sorun! = Sys .__ stdin__ sys.stdin zaman GNU taleb çalışmıyor olmasıdır. İmleci hareket ettirmek veya geçmişte gezinmek için ok tuşlarını kullanamıyorum. Ben here teslim edildi bu çok sorun için bir yama okudum, ama ben hiçbir şey geldiğini tahmin ediyorum.

Sys.stdin değerini değiştirmeden, hem bir borudan hem de terminalden girişi kabul etmenin bir yolu varsa, önerilere açığım.

+0

Ayrıca bkz bu hata raporu: http://bugs.python.org/msg286521 – src

cevap

0

sys.stdin ve sys.__stdin__ öğelerinin, sizin düşündüğünüz gibi olmadığını söylüyorum. Yeniden tahsis etmeden önce orijinal sys.stdin'den kurtulurdum.

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 

Veya yapmak bir kopyası

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