如何不等待远程执行的输出?
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()
我正在使用 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()