Executando um comando interativo de dentro do python
Eu tenho um script que eu quero correr de dentro de python (2.6.5), que segue a lógica abaixo:
Solicitar usuário por senha. Parece ("Digite a senha:") (* Nota: Entrada não ecoa para tela)Saída de informação irrelevanteSolicitar a resposta do usuário ("Blah Blah nome_do_arquivo.txt blá blá (S / N) ?:")A última linha de prompt contém texto que preciso analisar (filename.txt). A resposta fornecida não importa (o programa pode realmente sair daqui sem fornecer um, contanto que eu possa analisar a linha)
Meus requisitos sãoum pouco igual aEnvolvendo um aplicativo de linha de comando interativo em um script python, mas as respostas parecem um pouco confusas, e a minha ainda continua, mesmo quando o OP menciona que isso não acontece para ele.
Ao olhar em volta, cheguei à conclusão de quesubprocess
é a melhor maneira de fazer isso, mas estou tendo alguns problemas. Aqui está a minha linha Popen:
p = subprocess.Popen("cmd", shell=True, stdout=subprocess.PIPE,
stderr=subprocess.STDOUT, stdin=subprocess.PIPE)
Quando eu chamo umread()
oureadline()
emstdout
, o prompt é impressora para a tela e trava.
Se eu ligar para umwrite("password\n")
parastdin
, o prompt é gravado na tela e trava. O texto emwrite()
não está escrito (eu não faço o cursor mover a nova linha).
Se eu ligarp.communicate("password\n")
, mesmo comportamento como write ()
Eu estava procurando algumas idéias aqui sobre a melhor maneira de introduzir parastdin
e possivelmente como analisar a última linha na saída se você se sentir generoso, embora eu possa descobrir isso eventualmente.