亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何不等待遠程執行的輸出?

如何不等待遠程執行的輸出?

喵喵時光機 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 關注
  • 135 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號