Python调用R脚本遇FileNotFoundError及subprocess.Popen无响应问题求助
Python调用R脚本的问题解决
我尝试用Python的subprocess模块运行R脚本,遇到了几个问题,以下是我的尝试、对应报错及可行的解决思路:
我的尝试及问题
代码1 & 代码2
使用subprocess.call和subprocess.Popen的列表参数形式调用:
subprocess.call(['Rscript', '--vanilla', 'C:/Users/siddh/Downloads/R_script_BCA.R']) subprocess.Popen(['Rscript', '--vanilla', 'C:/Users/siddh/Downloads/R_script_BCA.R'])
两段代码均抛出相同错误:
FileNotFoundError: [WinError 2] The system cannot find the file specified
代码3
改用shell=True的字符串参数形式:
subprocess.Popen('Rscript --vanilla C:/Users/siddh/Downloads/R_script_BCA.R', shell=True)
运行后仅返回进程对象,脚本并未实际执行完成:
<Popen: returncode: None args: 'Rscript --vanilla C:/Users/siddh/Downloads/R...'>
但直接在命令提示符或PowerShell中执行以下命令可以正常运行脚本:
Rscript --vanilla "C:/Users/siddh/Downloads/R_script_BCA.R"
解决思路
1. 指定Rscript的完整路径
报错的核心原因是subprocess找不到Rscript.exe的位置——虽然命令行能直接调用,但Python进程可能未加载到对应的系统环境变量。
找到本地R安装目录下的Rscript.exe(比如默认路径为C:/Program Files/R/R-4.3.1/bin/Rscript.exe,版本号根据实际安装情况调整),将代码改为指定完整路径:
subprocess.call(['C:/Program Files/R/R-4.3.1/bin/Rscript.exe', '--vanilla', 'C:/Users/siddh/Downloads/R_script_BCA.R'])
2. 完善shell=True模式的执行逻辑
用Popen启动进程后,需要调用wait()方法等待脚本执行完毕;或者直接使用subprocess.call,它会自动等待子进程结束:
# 方法一:Popen + wait() proc = subprocess.Popen('Rscript --vanilla "C:/Users/siddh/Downloads/R_script_BCA.R"', shell=True) proc.wait() # 方法二:直接用subprocess.call subprocess.call('Rscript --vanilla "C:/Users/siddh/Downloads/R_script_BCA.R"', shell=True)
3. 确保R的bin目录在系统PATH中
检查系统环境变量PATH是否包含R安装目录下的bin文件夹(比如C:/Program Files/R/R-4.3.1/bin),如果没有就添加进去,然后重启Python IDE或终端,让环境变量生效。之后subprocess就能直接识别Rscript命令,无需指定完整路径。
内容的提问来源于stack exchange,提问作者Siddham Jasoria
相关产品推荐
相关产品推荐

