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

标签 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 完成。因此,我在文件仍在操作时获取文件。

最佳答案

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/

相关文章:

linux - Cpack header 文件夹目标

python - 尝试调整由matplotlib.pyplot打印出的图像的大小

python - 如何在python 2.7中保留通过yield生成的函数的方法属性?

python - DRF TypeError 'type' 对象不可迭代

python - 将 python pandas 数据帧的行名称提取为 pandas 系列

python - Nose 测试和综合覆盖

linux - 缺少 foo.c。在 Ubuntu 11.04 中使用 gcc 4.5

linux - 在 RabbitMQ 崩溃后有没有办法拯救队列?

python - 旋转图像并裁剪黑色边框

python - 列表相对于另一列的频率分布