当前位置: 首页 > 面试题库 >

等待直到通过Python在远程计算机上完成任务

刘兴修
2023-03-14
问题内容

我在Ubuntu上用python编写程序。在该程序中,我试图在连接到网络的远程计算机(RaspberryPi)上完成任务“删除文件”后打印一条消息。

但是在实际中,打印命令不会等到远程计算机上的任务完成。

有人可以指导我该怎么做吗?我的编码如下

import paramiko

# Connection with remote machine
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect('192.168.2.34', username='pi', password='raspberry')

filename   = 'fahad.txt'
filedelete ='rm ' + filename
stdin, stdout, stderr = client.exec_command(filedelete)
print ("File Deleted")
client.close()

问题答案:

这确实是在完成之前返回的paramiko SSH
exec_command(shell脚本)返回的副本,但是那里的答案并不十分详细。所以…

如您所见,这exec_command是一个 非阻塞 呼叫。因此,您必须使用以下任一方法来等待远程命令的完成:

  • Channel.exit_status_ready 如果要对命令完成情况进行非阻塞检查(即:池化)
  • Channel.recv_exit_status 如果您要阻塞直到命令完成(然后返回退出状态-退出状态0表示正常完成)。

在您的特定情况下,您需要稍后:

stdin, stdout, stderr = client.exec_command(filedelete)  # Non-blocking call
exit_status = stdout.channel.recv_exit_status()          # Blocking call
if exit_status == 0:
    print ("File Deleted")
else:
    print("Error", exit_status)
client.close()


 类似资料:
  • 问题内容: 如何让我的代码等待,直到DispatchQueue中的任务完成?是否需要任何CompletionHandler或其他东西? 我正在使用Xcode 8.2并在Swift 3中编写。 问题答案: 使用s可以实现这一点。您可以在群组和通话达到平衡时得到通知: 或者您可以等待: 注意 :阻止当前队列(在您的情况下可能是主队列),因此您必须在另一个队列上(如上面的示例代码中)以避免 死锁 。

  • 问题内容: 我有一个创建两个或多个子流程的主流程,我想让主流程等到所有子流程完成操作并退出吗? 问题答案: 一个对象有这个确切定义的方法:等待一个给定的子进程的完成(和,此外,对于重新调整它的退出状态)。 如果使用此方法,则可以防止进程僵尸闲逛太久。 (或者,您可以使用或来进行调用和等待。如果您不需要该进程的IO,那可能就足够了。但这可能不是一个选择,因为您的两个子进程似乎应该并行运行,而他们不会

  • 我想哭我的日程安排,直到我的任务完成。如果有时间执行第二个计划,则必须等到上一个任务尚未完成。我在java启动应用程序中使用@Schedule。我想每5分钟向数据库中插入一次数据,但我想保留我的时间表,直到插入的数据还没有完成,还有时间进行第二次执行。演示代码

  • 问题内容: 标题中已经存在的问题-如何使python脚本等到通过os.system()调用启动的某个过程完成?例如类似的代码 这将同时启动n次请求的进程,这可能会使我的PC有点汗水) 感谢您的任何建议。 问题答案: os.system() 确实 等待其过程完成后才返回。 如果您看到它不等待,则您正在启动的进程很可能会自行分离以在后台运行。在这种情况下,子进程。Popen+ wait示例Dor提供了

  • 问题内容: 我有这个代码: 发生的是该文件在实际执行之前已删除。 这是因为文件仅包含本机系统调用吗?执行文件 后 如何删除?(我不知道文件的输出是什么,因为它是动态变化的)。 问题答案: 通过使用,您要求在后台启动批处理文件: 因此,您从Java()启动的进程将在后台进程完成之前返回。 删除命令以在前台运行批处理文件-然后,将等待批处理文件完成: 根据OP,重要的是要有可用的控制台窗口-这可以通过

  • 问题内容: 我正在Ubuntu上用python编写程序,以在RaspberryPi上执行命令,并与网络连接。 有人可以指导我该怎么做吗? 问题答案: 当然,有几种方法可以做到! 假设您在主机上安装了Raspberry Pi,并且用户名是。 这是运行命令的默认Python库。 您可以使其运行并在远程服务器上执行所需的任何操作。 scrat已在他的回答中提及。如果您不想使用任何第三方库,则绝对应该这样