Windows下Python通过subprocess向R子进程传递参数的方法
Python传递变量给R子进程并自动更新文件命名方案
一、修改Python的subprocess调用代码
将Python中的变量作为命令行参数传递给R脚本,替代硬编码的变量值:
import subprocess # 定义需要传递的变量 sg = 1 vector_size = 100 window = 10 min_count = 1 min_n = 0 max_n = 0 epochs = 2 # 构造完整的命令行字符串(适配Windows路径含空格的情况) r_exe = r'"C:\Program Files\R\R-4.2.2\bin\Rscript"' r_script = r'"foodChemSVDOutly.R"' command = f"{r_exe} --vanilla {r_script} {sg} {vector_size} {window} {min_count} {min_n} {max_n} {epochs}" # 调用R子进程 subprocess.call(command, shell=True)
二、修改R脚本读取命令行参数
移除R脚本中硬编码的变量定义,改为读取Python传递的命令行参数:
# 读取Python传入的命令行参数(trailingOnly=TRUE只获取脚本后的参数) args <- commandArgs(trailingOnly = TRUE) # 将字符串参数转换为整数类型(匹配Python变量的类型) sg <- as.integer(args[1]) vector_size <- as.integer(args[2]) window <- as.integer(args[3]) min_count <- as.integer(args[4]) min_n <- as.integer(args[5]) max_n <- as.integer(args[6]) epochs <- as.integer(args[7]) # 以下代码保持不变,变量值会自动跟随Python端更新 model_id = sprintf('sg%s_vecsize%s_window%s_mincount%s_minn%s_maxn%s_epochs%s', sg, vector_size, window, min_count, min_n, max_n, epochs) cos_sim_file_loc = sprintf('cossim_chems_%s.csv', model_id) dat = fread(cos_sim_file_loc) # Some statistical analyses here outlier_file_loc = sprintf('outlier_chems_%s.csv', model_id) fwrite(dat[nonOut == 0, ][order(z_risk, decreasing = TRUE)], outlier_file_loc)
原理说明
Python通过命令行将变量值传递给Rscript,R脚本利用commandArgs()读取这些参数并赋值给对应变量,后续的model_id、输入输出文件路径会自动基于传入的变量生成。当Python中的变量修改后,传递的参数同步更新,无需手动修改R脚本即可实现文件命名的自动变化。
内容的提问来源于stack exchange,提问作者newbie
相关产品推荐
相关产品推荐

