在结构SUDO运行时是否有可能的执行功能

时间:2016-11-24 09:55:22

标签: python fabric

我正在执行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但没有成功。

1 个答案:

答案 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