我正在使用subprocess
从script.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代码,我的代码/库没有错。请给我一些有关这里可能出问题的提示...
答案 0 :(得分:-1)
抱歉,我最初的回答是完全错误的。
您的子流程调用:
subprocess.call(["/usr/bin/Rscript", "--vanilla", "script.R"])
将返回一个数字-这是进程的退出代码。如果成功,则没有错误,应该为零。您可以检查一下以确保您的R代码正确运行。
您是否尝试过直接运行R代码?它会产生output.csv吗?如果是这样,它会在正确的位置产生它吗?