脚本问题与Python同步

时间:2009-10-21 18:05:15

标签: python unison

我正在尝试创建一个简单的脚本来通过Unison自动化和记录同步。我也使用subprocess.Popen而不是通常的os.system调用,因为它已被弃用。我花了两天时间查看文档,并试图弄清楚我做错了什么,但出于某种原因,如果我从终端调用unison它没有问题,但是当我从Python调用它时尝试进行用户交互,此外我没有捕获但大约一半的输出,另一个仍在打印到终端。

这是我尝试使用的代码:

sync = Popen(["unison", "sync"], shell = True, stdout = PIPE)

for line in sync.stdout
    logFile.write(line)

sync.wait()

if sync.returncode == 0 or sync.returncode == None:
    logFile.write("Sync Completed Successfully\n")
else
    logFile.write("!! Sync Failed with a returncode of: " + str(sync.returncode) + "\n")

这是我的Unison配置文件:

root = /home/zephyrxero/temp/
root = /home/zephyrxero/test/

auto = true
batch = true
prefer = newer
times = true
owner = true
group = true
retry = 2

我做错了什么?为什么Unison的所有输出都没有保存到我的日志文件中,为什么要在脚本运行时要求我确认,而不是在我从终端运行它时呢?

更新 好的,感谢Emil我现在正在捕获所有输出,但我仍然无法弄清楚为什么在终端中输入“unison sync”会得到与从我的脚本中调用它时不同的结果。

2 个答案:

答案 0 :(得分:1)

最可能的罪魁祸首是unison正在向stderr发送一些输出而不仅仅是stdout。 Popen需要额外的stderr参数,因此您可以尝试捕获它而不是(或除了)stdout。

有关standard streams的快速参考,请参阅Wikipedia

答案 1 :(得分:0)

将[“unison”,“sync”]更改为简单[“unison sync”] ...现在似乎无需用户交互,不知道为什么会有任何不同...但对我有用