サーバーからUbuntuクライアントへのコマンドを実行するために、subprocess.Popenを使用してpythonプログラムを実装しました。サブプロセスは、すべての出力を 1 行ずつ読み取る必要があります。私のプログラムは Eclipse 環境で完全に動作します。すべての出力が期待どおりに印刷されます。しかし、Python インタラクティブ シェル (Windows と Linux の両方) でプログラムを実行すると、subprocess.Popen はすべてのコマンド出力を読み取れませんでした。出力はほとんど表示されず、Python はエラーなしでクラッシュします。ここに私のプログラムコードがあります:
def execute(self, IP_Instance, command):
keypairs_directory = Config.keypairs_directory
cmd = 'ssh ubuntu@%s'%IP_Instance+' -i %s'%keypairs_directory+' %s'%command
cmd_run = subprocess.Popen(cmd, stdout=subprocess.PIPE, shell=True)
for line in cmd_run.stdout:
print line
cmd_run.wait()
たとえば、コマンドを送信すると:
a.execute('xxx.xxx.xxx.xxx', 'ls -l')
出力があります
total 0
大丈夫です。しかし、私が送るとき:
a.execute('xxx.xxx.xxx.xxx', 'sudo apt-get update')
プログラムは
Fetched 8,364 kB in 6s (1,205 kB/s)
Reading package lists...
そしてPythonはに戻ります
>>>
私は communicate()[0], poll() を試しましたが、効果がありませんでした。すべてのマシンで Python 2.7 を使用しています。私は何を間違っていますか?