使用Python subprocess调用R脚本时出现WinError 193错误求助
解决Python调用R脚本时的WinError 193问题
我之前也碰到过这个一模一样的错误,折腾了好一会儿才搞清楚根源,给你梳理下问题所在和可行的解决办法:
为什么会出现WinError 193?
这个错误本质上是系统找不到你要调用的可执行文件,或者调用的不是合法的Win32应用程序,具体到你的情况,主要有这几个原因:
- 漏掉了Rscript的.exe后缀:在Windows系统里,
Rscript实际是Rscript.exe,如果没加后缀,系统可能识别不到这个可执行文件,尤其是你没把R的bin目录加到系统环境变量里的时候。 - 路径里的空格没处理好:你的R安装路径包含
Program Files这个带空格的目录,直接用列表形式传参数给subprocess.call时,空格可能导致系统解析路径出错。 - 相对路径的工作目录坑:
./testing.r是相对当前工作目录的路径,但Python脚本运行时的工作目录不一定是脚本所在的目录,这会导致找不到你的R脚本。 - 用错了路径格式:你后来试的
/usr/bin/Rscript是Linux/macOS下的路径,在Windows系统里完全不适用,肯定会报错。
具体的解决办法
1. 使用完整的带.exe的Rscript路径
首先要确认Rscript.exe的实际位置,它一般在R安装目录的bin文件夹下,不是根目录。把路径改成这样:
import subprocess import sys if condition: # 注意加上bin目录和.exe后缀 subprocess.call(["C:/Program Files/R/R-3.4.3/bin/Rscript.exe", "testing.r"]) sys.exit()
也可以用原始字符串避免转义问题:
subprocess.call([r"C:\Program Files\R\R-3.4.3\bin\Rscript.exe", "testing.r"])
2. 确保能找到同目录的R脚本
为了避免相对路径的问题,最好用Python脚本所在的绝对路径来拼接R脚本的路径:
import os import subprocess import sys # 获取当前Python脚本所在的目录 script_dir = os.path.dirname(os.path.abspath(__file__)) # 拼接R脚本的绝对路径 r_script_path = os.path.join(script_dir, "testing.r") if condition: subprocess.call([r"C:\Program Files\R\R-3.4.3\bin\Rscript.exe", r_script_path]) sys.exit()
这样不管你从哪个目录运行Python脚本,都能准确找到同目录下的testing.r。
3. 把R的bin目录加到系统环境变量(可选)
如果你不想每次都写完整路径,可以把R安装目录下的bin文件夹(比如C:\Program Files\R\R-3.4.3\bin)加到系统的PATH环境变量里,之后直接用"Rscript.exe"就能调用:
subprocess.call(["Rscript.exe", r_script_path])
4. 尝试使用shell=True(谨慎使用)
如果上面的方法都不行,可以试试加上shell=True参数,让系统shell来解析命令,但注意这个方法有安全风险(如果路径来自不可信输入的话):
subprocess.call('"C:/Program Files/R/R-3.4.3/bin/Rscript.exe" ./testing.r', shell=True)
内容的提问来源于stack exchange,提问作者tooty44
相关产品推荐
相关产品推荐

