由于子流程未完成,无法读取文件:Python

时间:2019-05-30 08:08:38

标签: python r subprocess

我正在使用subprocessscript.R运行test.py文件。我的test.py如下:

import subprocess
import pandas as pd
subprocess.call(["/usr/bin/Rscript", "--vanilla", "script.R"])   #line 3
df=pd.read_csv("output.csv")                                     #line 4

script.R如下:

library(limma)
df <- read.csv("input.csv")
df<-normalizeCyclicLoess(df)
write.csv(df,"output.csv")

运行上述文件(test.py)时,出现错误消息:

FileNotFoundError: [Errno 2] File b'output.csv' does not exist: b'output.csv'

我知道此错误是因为我的工作目录中没有output.csv文件。但是,我假设它是由script.R创建的,这种情况不会发生,可能是因为在line 3的执行完成之前,python转到了line 4。我们为此使用了here的帮助,并且如上所述,我们为此使用了call。那怎么了谢谢...

编辑:我注意到,如果我没有在代码中导入任何库(例如上面的limma),则一切正常。我可以根据需要编写任何冗长的代码,它不会给我任何错误,并且可以完成。但是,一旦导入任何库,subprocess.call(....)就会给我一个非零的结果(零表示进程已完成)。为了进行测试,我将script.R更改为library(limma)(并且没有其他更改)(也尝试了其他库,也得到了相同的结果),并且结果为非零。因此,我认为使用subprocess导入库存在一些问题。请注意,我可以直接运行R代码,我的代码/库没有错。请给我一些有关这里可能出问题的提示...

1 个答案:

答案 0 :(得分:-1)

抱歉,我最初的回答是完全错误的。

您的子流程调用:

subprocess.call(["/usr/bin/Rscript", "--vanilla", "script.R"])

将返回一个数字-这是进程的退出代码。如果成功,则没有错误,应该为零。您可以检查一下以确保您的R代码正确运行。

您是否尝试过直接运行R代码?它会产生output.csv吗?如果是这样,它会在正确的位置产生它吗?