2016-11-24 2 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 казнили каждые 5 секунд, в то время как мой код команды Rsync были запущены.

Теперь мне нужно использовать Fabric Sudo вместо подпроцесса. Я уже пытался использовать @Parallel и @Task, но без успеха.

ответ

0

Я архивировал это с помощью Threads.

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 

 Смежные вопросы

  • Нет связанных вопросов^_^