[下面是使用python
中的子进程执行R脚本的代码,后面有flask
和celery
工作程序。
#r_script is the R file
cmd = ['Rscript', r_script, input_file, json.dumps(parameters), output_file, r_script_dir]
self.__logger.info("Executing R script")
process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
process_result = process.communicate()
我在第process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
行中遇到错误
错误:init中的文件“ /usr/lib/python2.7/subprocess.py”,第679行errread,errwrite)_execute_child中的文件“ /usr/lib/python2.7/subprocess.py”,第1249行提高child_exception-OSError:[Errno 2]没有这样的文件或目录
这可能是由于两个问题,一个是,您必须添加shell=True
才能在subprocess
中执行shell命令。
process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE,shell=True)
此外,这也可能是由于Shell无法找到执行它的Rscript
命令而导致的。如果您不设置机器中Rscript
的路径,通常会出现这种情况。您可以通过在终端/重击中键入Rscript
来测试它,如果它说找不到命令,则必须在路径中指定它才能检测到它。
下面是一个示例:
export PATH=$PATH:/root/R/bin
或
export PATH=$PATH:/root/R-3.4.1/bin # specific R version