Python如何在远程机器上执行命令并等待执行完成?

时间:2015-01-21 05:29:24

标签: python linux python-2.7 paramiko

我正在使用一个使用paramiko连接到远程linux机器的python脚本。建立连接后,我想在远程计算机上运行命令。此命令首先在远程计算机上创建几个文件,然后对这些文件执行一些操作(命令执行可能需要1秒到1分钟到10分钟)。下一步,我使用

在本地计算机上传输这些文件
paramiko.SFTPClient.from_transport(transport).get(filename)

此命令正常工作并收集文件。但问题是它不会等到文件上的所有操作都完成。结果,我得不到合适的数据。有人可以帮我吗?

我为此找到了以下命令,

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

(注意:stdout,stderr等只是用于同名。我不打扰他们的输出)


但是这个命令sh_conn_ssh.exec_command(create_and_operate_on_files)并没有等待命令create_and_operate_on_files完成。结果,我在获取文件时仍在操作。

1 个答案:

答案 0 :(得分:0)

Paramiko中的

exec_command()确实等待命令完成。看起来你的命令没有阻塞;也许它本质上在后台运行?如果您尝试运行exec_command("sleep 10"),您应该会看到它在10秒后才会将控制权返回给本地Python。

如果在完成之前无法创建远程程序块,则需要实现一些其他机制来检查它是否已完成 - 例如等待文件可用,您可以使用Paramiko' s { {1}}函数,如下所述:Check whether a path exists on a remote host using paramiko