簡體   English   中英

Python paramiko腳本,在exec_command()期間讀取輸出的問題

[英]Python paramiko script, problems reading output during exec_command()

背景 :我正在使用python和paramiko來自動化我每次必須交給一個類的程序時經歷的過程。 我們使用一個名為“handin”的命令來提交源代碼,但這必須從學校的計算機上完成。 因此,當我從家里提交代碼時,我必須:sftp進入學校服務器,將文件放入目錄,ssh進入學校計算機,使用'handin'命令

我可以成功地將文件放到學校的機器上。 當我嘗試使用exec_command('handin my files')然后讀取輸出以確定下一個操作時,會出現問題。

所以我有

try:
   (stdin, stdout, stderr) = client.exec_command(s)
except:
   print 'whoops'
   sys.exit()
print stdout.readlines()

但是由於某些原因導致死鎖,腳本似乎什么都不做,我必須最終殺死整個過程(ctrl + c不起作用)。 我不確定exec_command是否未正確完成(即使它已經離開try / catch塊)或者我是否有網絡問題或者是什么。

有任何想法嗎?

更新:

問題在於在執行期間與handin命令交互。 執行命令后,handin可能仍在運行,也可能不運行。 如果它第一次提交它說成功,等等等等,並完成執行。 一切都很好。 但是如果我重新提交,我必須為每個文件授權覆蓋(stdin.write('y'))。

TL / DR:

如何相應地檢查exec_command()是否仍在運行,等待輸入和stdout的readline()?

我沒有看到上面的代碼snippit有什么問題。 下面的程序是一個完整的腳本,它登錄到主機並運行ls命令來查看文件。 我只是嘗試過,它對我有用。 也許嘗試一下,看看它是否適合你。 如果它不起作用,我懷疑某個特定於您的ssh服務器,正在運行的命令或paramiko安裝的問題。 如果它對您有用,那么只需對此進行更改即可轉向現有功能並查看其中斷位置。

import paramiko
ssh=paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('<ip address here>',username='<username here>',password='<password here>')
stdin,stdout,stderr = ssh.exec_command("ls /")
print stdout.readlines()

如果這對您有用,我的下一個建議是嘗試用您嘗試運行的實際handin命令替換'ls /'。 它可能是命令掛起等待用戶輸入等。

問題可能是遠程命令正在等待輸入(它希望你寫一些東西到stdin,不知道你不會去,除非你這么說)。 嘗試stdin.channel.shutdown_write() (我相信stdin.close()本身不會做的伎倆:那只會導致刷新)

要解決此問題並獲取的輸出,您可能希望嘗試使用選項

例如:

import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

def MonitorProcess():
    ssh.connect('10.2.0.230', username='ibmsys1', password='passw0rd', timeout=5)
    stdin, stdout, stderr = ssh.exec_command('/sbin/ifconfig', timeout=3, get_pty=True)
    #stdin, stdout, stderr = ssh.exec_command('/sbin/ifconfig') -> simple exec ex.
    print stdout.read()

MonitorProcess()

這是一個老線程,但我也看到了這個問題。 這是由於Paramiko中的一個錯誤,它無法從遠程命令處理大型STDOUT,因此它會掛起。

參考: https//github.com/paramiko/paramiko/issues/515

可能的解決方案: https//gist.github.com/matjohn2/2c1c4988e17112a34f310667e0ff6e7e

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM