2016-11-24 91 views
2

我正在執行rsync命令並通過stdout實時獲取輸出。織物SUDO運行時是否可以執行函數

我的問題是我需要操作這個輸出,而我的命令正在運行。

我的舊代碼與子像這樣工作:

cmd = 'rsync -rc --delete --progress %s %s' % (path, PATH_LOCAL_STORAGE) 
with io.open("%s%s" % (TEMP_LOCAL, filename), 'wb') as writer: 
     process = sudo(cmd, stdout=writer, shell=True, stdin=subprocess.PIPE) 
     while process.poll() is None: 
      doWhatIWant() 
      time.sleep(5) 

所以我doWhatIWant而我的代碼rsync命令正在運行在執行每一5秒。

現在我需要使用Fabric Sudo而不是子進程。我已經嘗試使用@Parallel和@Task,但沒有成功。

回答

0

我用線程歸檔了這個。

def RunMyCodeAsync(writer): 
    sudo(cmd, stdout=writer, shell=True) 

def DoMyCopy(): 
    with io.open('file.txt', 'wb') as writer: 
     thread = threading.Thread(
      name='RunMyCodeAsync', 
      targed=RunMyCodeAsync, 
      args(writer,)) # args must have the comma ',' 
     thread.start() 
     while thread.is_alive(): 
      DoWhatIWant() 
      time.sleep(5) # Run each 5 seconds 
相關問題