Ho uno script che voglio correre dall'interno python (2.6.5), che segue la logica di seguito:esecuzione di un comando interattivo all'interno di pitone
- utente Chiedi la password. Assomiglia ("Inserisci password:") (* Nota: l'input non viene visualizzato sullo schermo)
- Uscita informazioni irrilevanti
- Richiedi all'utente risposta ("Blah Blah nomefile.txt blah blah (Y/N) ?:"
L'ultima riga di prompt contiene testo che ho bisogno di analizzare (nomefile.txt). La risposta fornita non importa (il programma potrebbe effettivamente uscire qui senza fornire uno, finché posso analizzare la riga)
miei requisiti sono in qualche modo simile aWrapping an interactive command line application in a python script. Forse sono solo un po 'spessa, ma le risposte sembrano un po' confuse, e la mia ancora si blocca anche quando l'OP dice che non lo fa per lui.
Guardandosi intorno, sono giunto alla conclusione che il sottoprocesso è il modo migliore per farlo, ma ho alcuni problemi. Linea popen è al di sotto
p = subprocess.Popen("cmd", shell=True, stdout=subprocess.PIPE,
stderr=subprocess.STDOUT, stdin=subprocess.PIPE)
Quando chiamo un read() o readline() su stdout, la richiesta è la stampante allo schermo e si blocca.
Se chiamo una scrittura ("password \ n") per stdin, il prompt viene scritto sullo schermo e si blocca. Il testo in write() non è scritto (io non il cursore muove una nuova riga).
Se chiamo p.communicate ("password \ n"), stesso comportamento di write()
ero alla ricerca di un paio di idee qui sul modo migliore per essere immessi in stdin e, eventualmente, come analizzare l'ultima riga dell'output se si sente generoso, anche se probabilmente potrei capirlo alla fine. Grazie!
Si dovrebbe guardare pexpect: http://www.noah.org/wiki/pexpect –
Penso che è necessario scrivere su stdout e leggere dallo standard input ... non l'otherway in giro come si mette sopra –
@Joran haha si, mi dispiace. Ecco cosa intendevo. – user1521597