我正在开发一个使用 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
完成。因此,我在文件仍在操作时获取文件。
最佳答案
Paramiko 中的
exec_command()
实际上会等待命令完成。看起来你的命令没有阻塞;也许它本质上在后台运行?如果您尝试运行 exec_command("sleep 10")
,您应该会看到它在 10 秒后才会将控制权返回给您的本地 Python。
如果你不能让远程程序在完成之前阻塞,你将需要实现一些其他机制来检查它是否已经完成——比如等待文件可用,你可以使用 Paramiko 的 stat( )
函数,如此处所述:Check whether a path exists on a remote host using paramiko
关于python - Python如何在远程机器上执行命令并等待执行完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28060237/