0

我正在编写一个 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()

当我在外壳中一个接一个地单独拨打电话时,它们工作正常。但在脚本中,它们总是会中断。我已经追踪了错误的来源,似乎输出文件在最后被截断(让我相信在没有完成之前的调用的情况下进行了调用)。

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

有什么想法吗?

4

1 回答 1

0

我可能会先重写一点以使用 subprocess 模块而不是 os 模块。

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

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

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

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

于 2012-04-10T22:58:50.657 回答