簡體   English   中英

Python Paramiko-等待傳遞的命令的更多輸出后退出

[英]Python Paramiko - wait on more output from passed command before exiting

我有以下代碼

client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.client.AutoAddPolicy())
privatekeyfile = 'PK_FILE_PATH'
username ="USERNAME"
mykey = paramiko.RSAKey.from_private_key_file(privatekeyfile)
client.connect(hostname= IP, username=username, pkey=mykey)
command = SERVER_COMMAND

stdin, stdout, stderr = client.exec_command(command)
while not stdout.channel.exit_status_ready():
  if stdout.channel.recv_ready():
    stdoutLines = stdout.readlines()
print stdoutLines

我正在執行的命令大約需要10秒鍾才能在服務器上運行。 它首先返回一些信息(用戶配置文件和模塊版本),然后運行一些代碼以檢查某些本地服務器資源的狀態。

收到初始標頭信息后,Paramiko將關閉連接。 我需要它來等待serverside命令的完整輸出返回。 我嘗試在這里實施丁丁解決方案,結果相同

有任何想法嗎?

收到初始標頭信息后,Paramiko將關閉連接。

我認為那不是真的。 嘗試運行類似的命令

command = 'echo first && sleep 60 && echo second'
while not stdout.channel.exit_status_ready():
  if stdout.channel.recv_ready():
    stdoutLines = stdout.readlines()
    print stdoutLines

您將看到兩行(還要注意,我正在循環中打印行,因此您可以看到行)。

您的命令必須包含某些內容,例如:

  • 該命令將最終輸出打印在stderr ,而不是stdout
  • 不帶TTY執行時,該命令不顯示最終輸出。
  • 該命令是在后台執行子命令的腳本,因此該腳本在子命令之前完成。

add get_pty=True這將等待命令執行完成。 stdin,stdout,stderr = self.ssh.exec_command(command,get_pty=True)

暫無
暫無

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

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