Vorrei chiamare sys.stdin.readlines()
senza rimuovere nulla da stdin. Sto usando Python2.7 su Linux.python2.7 peek at stdin
Per esempio, quello che voglio è:
x = sys.stdin.readlines()
y = sys.stdin.readlines()
allora X e Y hanno stringhe identiche. Sarebbe accettabile se ho potuto leggere da stdin e mettere il contenuto nel
Sfondo:.
Ho un modulo che o accetta un file come input ed un argomento -opzionale OR "alcuni input convogliato nel modulo "e un argomento opzionale
mymodule.py myfile -option
or
echo "some input" | mymodule.py -option
Ho questo funzionamento, e funziona bene. Sto verificando sys.stdin.isatty()
per determinare se c'è un input in pipe. Se c'è, il modulo genererà un errore se c'è più di un argomento dalla riga di comando (ci può essere un argomento opzionale, ma nessun file specificato se c'è è stdin)
Il motivo per cui ho un problema è perché sono obbligato a far passare i test di unità sulla riga di comando ma anche in eclissi. Tutto funziona correttamente sulla riga di comando, ma sembra che il plugin PyUnit per eclipse utilizzi anche sys.stdin
.
Se chiamo sys.stdin.readlines()
, eclipse rinuncia ai test di unità in esecuzione. Inoltre, eclipse sta spingendo le cose in sys.stdin
anche quando non si specifica alcun argomento, il che rende difficile determinare se ci sono argomenti validi o meno.
Mi sembra che in qualche modo ottenere sys.stdin.readlines()
senza modificare i contenuti sarebbe una soluzione, ma non so come farlo. Qualsiasi risposta a risolvere questo problema sarebbe soddisfacente.
Eventuali duplicati: Peek into stream of Popen pipeline in Python
Grazie!
Edit: non avendo alcuna fortuna con qualcosa di simile ...
foo = sys.stdin.readlines()
sys.stdin.write(foo)
Edit: Rimosso ripristino stdin in tearDown e la messa in funzione di test, invece, ma nessun effetto
cifre :(Speravo che fosse più simile a un file che potrei .seek (0) su ... – liang
Mi sto rapidamente arrendendo. Stavo avendo un po 'di fortuna con la lettura da stdin, quindi l'impostazione sys.stdin = open ('/ dev/tty', 'r +'), ma questo non funziona in Eclipse. Esito a capire da dove proviene l'input, perché alla fine i clienti useranno il modulo sul comando linea comunque. Penso che la soluzione migliore sia il tuo suggerimento: controlla prima un file e poi guarda lo stdin – liang