python子进程调用的不可预测的行为

时间:2012-04-10 21:20:50

标签: python subprocess

我正在编写一个python脚本,通过进行子进程调用,在循环中执行一系列操作,如下所示:

os.system('./svm_learn -z p -t 2 trial-input model')
os.system('./svm_classify test-input model pred')
os.system('python read-svm-rank.py')
score = os.popen('python scorer.py -g gold-test -i out').readline()

当我在shell中一个接一个地进行调用时,它们工作正常。但在剧本中他们总是打破。我已经跟踪了错误的来源,似乎输出文件被截断到最后(让我相信在没有完成之前的调用的情况下进行调用)。

我尝试使用subprocess.Popen然后使用Popen对象的wait()方法,但无济于事。剧本仍然破裂。

有什么想法在这里发生了什么?

1 个答案:

答案 0 :(得分:0)

我可能首先重写一下使用子进程模块而不是os模块。

然后我可能会通过研究系统调用跟踪来仔细检查出现了什么问题: http://stromberg.dnsalias.org/~strombrg/debugging-with-syscall-tracers.html

希望文件末尾附近会出现一个“E”错误代码,告诉你遇到了什么错误。

另一个选择是注释子进程的子集(假设第n + 1并不严重依赖于第n个的输出),以确定其中一个有问题。之后,您可以在违规脚本中添加一些额外的错误报告,以查看它正在做什么。

但如果你没有被C-ish系统调用跟踪推迟,那可能会更容易。