我實現了一個使用subprocess.Popen執行從服務器到Ubuntu客戶端的命令的python程序。子進程必須逐行讀取所有輸出。 我的程序在Eclipse環境中完美運行。所有輸出按照我的預期打印。 但是,當我在Python交互式shell(在Windows和Linux)下運行程序時,subprocess.Popen沒有讀取所有命令輸出。輸出只顯示很少,然後Python崩潰沒有任何錯誤。這是我的程序代碼:Python子進程無法讀取shell中的所有輸出
def execute(self, IP_Instance, command):
keypairs_directory = Config.keypairs_directory
cmd = 'ssh [email protected]%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的背朝
>>>
我曾試過通信()[0],則poll(),但他們沒有帶來效果。我爲所有機器使用Python 2.7。我究竟做錯了什麼?
如何返回到交互式提示映射到「崩潰沒有任何錯誤」?如果您返回cmd_run.wait()',那麼返回代碼是什麼? – eryksun