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

我正在使用 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 开始。我尝试使用“&”,但没有任何影响。有什么办法可以做到这一点,或者这是不可能的吗?


喵喵时光机
浏览 108回答 2
2回答

冉冉说

为什么不尝试一下线程概念呢?import pysftp as sftpfrom threading import Threadcnopts = sftp.CnOpts()cnopts.hostkeys = Nonehandle = 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()

慕无忌1623718

execute一种选择是使用该模块为每个语句启动一个新进程multiprocessing(。您使用Process构造函数创建一个进程,为其提供要执行的目标函数和任何参数,并告诉它使用该start方法启动其函数。如果您想等待进程完成,请使用join该函数的方法。您的代码可能如下所示(确保您的语句包含在一个if __name__ == '__main__':块中):import pysftp as sftpfrom multiprocessing import Processif __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()
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python