为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

喵喵时光机 2023-09-05 15:53:48
我正在使用 pysftp 进行远程执行,问题是我不想等待远程执行的输出,我只想开始执行并完成它。import pysftp as sftpcnopts = sftp.CnOpts()cnopts.hostkeys = Nonehandle = sftp.Connection('10.0.2.10',username='kali', password='root', cnopts=cnopts)handle.execute('/tmp/doThis')handle.exeute('/tmp/doThat')现在的问题是,脚本正在等待 doThis 结束,然后从 doThat 开始。我尝试使用“&”,但没有任何影响。有什么办法可以做到这一点,或者这是不可能的吗?
查看完整描述

2 回答

?
冉冉说

TA贡献1877条经验 获得超1个赞

为什么不尝试一下线程概念呢?

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()


查看完整回答
反对 回复 2023-09-05
?
慕无忌1623718

TA贡献1744条经验 获得超4个赞

execute一种选择是使用该模块为每个语句启动一个新进程multiprocessing(。您使用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()


查看完整回答
反对 回复 2023-09-05
  • 2 回答
  • 0 关注
  • 99 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信