2009-10-21 25 views
1

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

这里是我的代码,我想使用:

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") 

这里是我的齐奏的配置文件:

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

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

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

UPDATE: 好,感谢埃米尔现在我捕获所有的输出,但我仍然无法弄清楚,为什么键入“齐声同步”到终端,从调用它时比越来越不同的结果,我脚本。

回答

1

最可能的罪魁祸首是unison发送一些输出到stderr而不是stdout。 Popen需要额外的stderr参数,所以你可以尝试捕获,而不是(或除了)stdout)。

有关standard streams的快速参考看到Wikipedia

+0

我以前试过管道标准错误,但由于某种原因,它似乎没有工作...可能是之前我想通了,它正在等待输入...嗯...似乎捕获所有的输出现在。 – 2009-10-21 18:21:18

0

更改[“异口同声”,“同步”]简单[“齐声同步”] ...似乎是现在的工作,而不需要用户交互,不知道为什么,这将是任何不同......但工程我。