如何不等待远程执行的输出?

How to not wait for the output of the remote execution?

我正在使用 pysftp 进行远程执行,问题是我不想等待远程执行的输出,我只想开始执行并完成它。

import pysftp as sftp
cnopts = sftp.CnOpts()
cnopts.hostkeys = None
handle = sftp.Connection('10.0.2.10',username='kali', password='root', cnopts=cnopts)
handle.execute('/tmp/doThis')
handle.exeute('/tmp/doThat')

现在的问题是脚本正在等待 doThis 结束,然后它从 doThat 开始。我尝试使用“&”,但没有任何影响。 有没有办法做到这一点,还是不可能?

一个选项是使用 multiprocessing 模块为每个 execute 语句启动一个新进程(有关文档,请参阅 here)。您使用 Process 构造函数创建一个进程,为其提供要执行的目标函数和任何参数,并告诉它使用 start 方法启动其函数。如果要等待进程完成,请使用该函数的 join 方法。您的代码可能看起来像这样(确保您的语句包含在 if __name__ == '__main__': 块中):

import pysftp as sftp
from multiprocessing import Process


if __name__ == '__main__':
    cnopts = sftp.CnOpts()
    cnopts.hostkeys = None
    handle = sftp.Connection(
        '10.0.2.10',
        username='kali',
        password='root',
        cnopts=cnopts
    )
    # Create processes
    p1 = Process(target=handle.execute, args=('/tmp/doThis',))
    p2 = Process(target=handle.execute, args=('/tmp/doThat',))
    # Tell processes to start
    p1.start()
    p2.start()
    # If you want to, then wait for both processes to finish
    p1.join()
    p2.join()

你为什么不尝试 threading 概念?

import pysftp as sftp
from threading import Thread
cnopts = sftp.CnOpts()
cnopts.hostkeys = None
handle = sftp.Connection('10.0.2.10',username='kali', password='root', cnopts=cnopts)

def exec(cmd):
    #handle will be taken from the prev declaration
    handle.execute(cmd)

list_cmds = ['/tmp/doThis', '/tmp/doThat']

for cmd in list_cmds:
    Thread(target=exec, args=[cmd]).start()