2016-07-05 9 views
0

「subprocess.Popen.stdin.write」コマンドが失敗するように見えるのはなぜですか?subprocess.Popen.stdinへの書き込みが正しく実行されない

#!/usr/bin/env python3 
# coding=utf-8 
import os 
import subprocess 

bash = subprocess.Popen(['bash'], 
    stdout=subprocess.PIPE, stdin=subprocess.PIPE, 
    stderr=subprocess.PIPE, shell=True) 

(シェル= TRUE:参照エディット2)

bash.stdin.write(b'echo foo\n') 
print(bash.stdout.readline()) 
bash.stdin.write(b'echo bar\n') 
print(bash.stdout.readline()) 

編集:最初のsubprocess.Popen.stdout.readline(のITブロック)、おそらくsubprocess.Popenには行が存在しないので、 .stdout。

編集2:これは依然としてハングします。

+0

あなたが任意のエラーメッセージが表示されますか?それは何をし、それは何をすべきか? – Adam

+0

それはそれを行うことはありません。 bashにはいくつかの実行モードがあり、探しているのはシェルモードです。あなたは 'Popen'呼んでいますが、セキュリティホールを作成する際に何を行うことができますことは、'シェル= true'を行うことです。 https://docs.python.org/2/library/subprocess.html – HuStmpHrrr

+0

あなたがbashの操作を行い、何が起こるか:あなたは、ドキュメントをチェックする必要がありますか?どうやらそれは私のために働いて見えます、それはシェルモードで起動したときに、あなたのbashはこれらのいくつかを印刷するので、それはこのようなものです。これに対するもう一つの解決策は 'ptty'です。もっと正確ですがもっと複​​雑です。あなたが正しいことをしたいのであれば、それもチェックしたいでしょう。 – HuStmpHrrr

答えて

0

GNU/Linux(多分、テストしていないかもしれません)を実行し、pexpect( "pip install pexpect")をインストールする限り、この質問に対する回答は有効です。

#!/usr/bin/env python3 
# coding=utf-8 
""" 
Python command line software control example 
""" 
import pexpect 

encode = 'UTF-8' 

bash = pexpect.spawn('/usr/bin/env bash', encoding=encode) 

bash.sendline('echo foo') 
print(bash.readline()) 
bash.sendline('echo bar') 
print(bash.readline()) 
関連する問題