我正在执行rsync命令并使用stdout实时获取输出。
我的问题是我需要在命令运行时操作此输出。
我的旧代码使用子进程,如下所示:
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秒执行一次。
现在我需要使用Fabric Sudo而不是subprocess。我已经尝试过使用@Parallel和@Task但没有成功。
答案 0 :(得分: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