2012-12-13 59 views
4

我實例化一個的paramiko信道,那麼我執行命令,並得到其輸出:的paramiko模擬的ssh -t選項

channel = transport.open_session() 
channel.exec_command('service myservice restart') 

stdout = channel.makefile('rb') 

for line in stdout: 
    print line, 

然而,執行該命令(其完成)後,輸出迭代被阻斷。

我使用ssh測試:

ssh myhost service myservice restart  # terminal gets blocked 
ssh -t myhost service myservice restart # OK 

所以我想模擬的paramiko的 「-t」 選項。到目前爲止,我嘗試過:

channel = transport.open_session() 
channel.get_pty() 
channel.invoke_shell() 

stdin, stdout = channel.makefile('wb'), channel.makefile('rb') 
stdin.write('service myservice restart\n') 

for line in stdout: 
    print line, 

但是現在,stdout沒有關閉,for永遠不會結束。

任何想法?

回答

0

它看起來像invoke_shell()返回Channel,它看起來像Channel s要求您明確關閉它們。我會嘗試關閉一些您打開的頻道,特別是由invoke_shell()返回的頻道。

+0

顯然,invoke_shell返回無。另外,在發送命令之後關閉通道(通過寫入stdin)不要讓命令完成,並且我不會輸出到stdout(有時候我只能得到像「Last login:Tue Dec 11 09: 16:32 2012 from localhost「) – kaspersky

+0

通過」不要讓命令完成「我的意思是」不要等待命令完成「 – kaspersky

-1

看一看那youre試圖運行 - 看看是否有這樣的

/dev/null 2>&1 

林有同樣的問題任何線爲你 - 在我的情況下試圖遠程運行bitnami控制腳本中的腳本。你的帖子中的某些東西慢慢地回憶起我的記憶,並提醒我控制腳本中的輸出重定向(這些讓我感到頭痛)。

通常情況下,他們習慣於忽略錯誤,或者將它們記錄在特定的地方 - 我還沒有機會嘗試,但可能要麼在腳本結尾處將它們退出,要麼您不關心響應,甚至可能手動重定向一些創建的數據> & 2將工作。

+0

不,我不使用任何重定向... – kaspersky