Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python子进程调用的不可预测行为_Python_Subprocess - Fatal编程技术网

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

python子进程调用的不可预测行为,python,subprocess,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(

我正在编写一个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方法,但没有效果。脚本仍然中断


知道这里发生了什么吗?

我可能会先重写一下,使用子流程模块而不是操作系统模块

然后我可能会通过研究系统调用跟踪来仔细检查出了什么问题:

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

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


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

os.system和subprocess.call都会等待系统调用完成后再返回。如果您需要调试程序的帮助,我们需要更多信息。另外,os.system'python read svm rank.py'在我看来非常可疑,是否可以从read svm rank.py导入您需要的内容?您的文件是否碰巧位于NFS这样的远程文件系统上?用户实际上解决了自己的问题,并将其解决方案作为已删除答案的注释发布。这是由于文件未关闭,因此未刷新到磁盘。用户实际上解决了自己的问题,并将其解决方案作为已删除答案的注释发布。这是由于文件未关闭,因此未刷新到磁盘。