我已经使用exec_command成功实现了Paramiko,但是,我在远程计算机上运行的命令有时可能需要几分钟才能完成。
在此期间,我的Python脚本必须等待远程命令完成并接收stdout。
我的目标是让远程计算机“在后台运行”,并允许本地Python脚本在通过exec_command发送命令后继续。
此时我并不关心stdout,我只是想绕过等待stdout返回,这样脚本可以在远程机器上运行时继续运行。
有什么建议吗?
当前脚本:
def function():
ssh_object = paramiko.SSHClient()
ssh_object.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh_object.connect(address, port=22, username='un', password='pw')
command = 'command to run'
try:
stdin, stdout, stderr = ssh_object.exec_command(command)
stdout.readlines()
except:
do something else
谢谢!
答案 0 :(得分:1)
使用单独的线程运行命令。通常应使用join
命令清除线程(在程序退出之前,您希望运行的daemon
个线程例外)。具体如何做到这一点取决于程序运行的其他内容。但一个例子是:
import threading
def ssh_exec_thread(ssh_object, command):
stdin, stdout, stderr = ssh_object.exec_command(command)
stdout.readlines()
def function():
ssh_object = paramiko.SSHClient()
ssh_object.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh_object.connect(address, port=22, username='un', password='pw')
command = 'command to run'
thread = threading.Thread(target=ssh_exec_thread, args=(ssh_object, command)
thread.start()
...do something else...
thread.join()
您可以通过将Queue
传递给ssh_exec_command
并将结果放在队列中,以便稍后由程序处理,从而成为这位发烧友。