我正在编写一个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()方法,但无济于事。剧本仍然破裂。
有什么想法在这里发生了什么?
答案 0 :(得分:0)
我可能首先重写一下使用子进程模块而不是os模块。
然后我可能会通过研究系统调用跟踪来仔细检查出现了什么问题: http://stromberg.dnsalias.org/~strombrg/debugging-with-syscall-tracers.html
希望文件末尾附近会出现一个“E”错误代码,告诉你遇到了什么错误。
另一个选择是注释子进程的子集(假设第n + 1并不严重依赖于第n个的输出),以确定其中一个有问题。之后,您可以在违规脚本中添加一些额外的错误报告,以查看它正在做什么。
但如果你没有被C-ish系统调用跟踪推迟,那可能会更容易。