2015-01-21 740 views
2

我正在使用paramiko連接到遠程linux機器的python腳本。連接建立後,我想在遠程機器上運行一個命令。該命令首先在遠程機器上創建少量文件,然後對這些文件執行一些操作(命令執行可能需要1秒到1分鐘到10分鐘)。下一步,我用運輸Python如何在遠程機器上執行命令並等待執行完成?

paramiko.SFTPClient.from_transport(transport).get(filename) 

這個命令我的本地機器上的這些文件是工作的罰款和收集的文件。但問題是它不會等待文件上的所有操作完成。結果,我沒有得到正確的數據。任何人都可以在這裏幫我嗎?

我發現下面的命令,爲了這個目的,

stdin, stdout, stderr = ssh_conn_ssh.exec_command(create_and_operate_on_files) 

(注:標準輸出,標準錯誤等,爲同名只是給我不打擾他們的輸出)


但該命令sh_conn_ssh.exec_command(create_and_operate_on_files)不會等待命令create_and_operate_on_files完成。結果,我正在獲取文件,而他們仍在進行操作。

+0

嘗試'sys.open []'這是等待,直到完成過程 – GLHF 2015-01-21 05:31:36

+0

你能告訴我究竟在哪裏使用這個命令? – Gauranga 2015-01-21 05:36:58

+0

你的問題是'p = subprocess.Popen(create_files_and_operate_on_themstdin,stdout = subprocess.PIPE stdout,stderr = subprocess.STDOUT)''。現在它消失了。爲什麼?用這個代替這個 – GLHF 2015-01-21 06:04:52

回答

0

exec_command()在Paramiko實際上等待命令完成。看起來你的命令沒有被阻止;也許它本質上在後臺運行?如果你嘗試運行exec_command("sleep 10"),你應該看到它不會將控制權返回給你的本地Python,直到10秒鐘過去。

如果在完成之前無法完成遠程程序塊,則需要實現一些其他機制來檢查它是否已完成 - 例如等待使用Paramiko的stat()函數可以使用的文件,如這裏描述:Check whether a path exists on a remote host using paramiko

+0

從paramiko 2.1.2開始,ssh.exec_command('sleep 10')立即返回。 – Patrick 2017-09-14 19:06:09