2016-11-24 20 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) 

を自分のコードのrsyncコマンドを実行していた間、だから私のdoWhatIWantが各5秒を実行しました。

サブプロセスの代わりにファブリック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 
関連する問題