我正在使用一个使用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
完成。结果,我在获取文件时仍在操作。
答案 0 :(得分:0)
exec_command()
确实等待命令完成。看起来你的命令没有阻塞;也许它本质上在后台运行?如果您尝试运行exec_command("sleep 10")
,您应该会看到它在10秒后才会将控制权返回给本地Python。
如果在完成之前无法创建远程程序块,则需要实现一些其他机制来检查它是否已完成 - 例如等待文件可用,您可以使用Paramiko' s { {1}}函数,如下所述:Check whether a path exists on a remote host using paramiko