You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python如何向subprocess子进程传递路径变量执行CMD命令

问题排查

你的代码有两处核心错误,才会导致报错+功能不符合预期:

  • 函数定义时声明了必须传入test_path位置参数,但最后调用Test_Function()时没有传入任何参数,直接触发了你看到的missing 1 required positional argument报错。
  • 对subprocess的运行逻辑理解有误:每一次subprocess.call启动的都是独立的、和父进程隔离的子进程,第一次调用执行cd切目录的操作,只会在那个短命的子进程里生效,进程退出后环境就完全销毁了,第二次调用执行python命令时,工作目录还是主进程的默认目录,之前的cd操作完全没作用。

额外提醒:Windows下单独用cd命令跨盘符切换目录是不生效的,必须加/d参数,比如cd /d D:\test,这也是很多人踩过的坑。

正确实现方案

根本没必要单独调用cd命令,subprocess原生提供了cwd参数,直接指定子进程的运行工作目录即可,代码简洁还不会出进程隔离的问题:

import subprocess 

# 替换成你实际的目标目录路径
test_path = "C:/random_path/your_target_folder"

def run_file_in_path(target_dir):
    # cwd参数直接指定子进程启动后的工作目录,等价于先cd到目标路径再执行命令
    subprocess.call("python file.py", shell=True, cwd=target_dir)

# 调用函数时记得把定义好的路径变量传进去
run_file_in_path(test_path)

可选优化

如果要规避shell=True带来的命令注入风险(官方推荐的安全写法),可以把命令拆成列表传入,不需要依赖shell解析:

subprocess.call(["python", "file.py"], cwd=target_dir)

如果要运行的不是python脚本,是目录下的exe、bat等其他文件,只需要替换对应执行命令即可,cwd参数的效果完全一致。

内容的提问来源于stack exchange,提问作者Senior Banan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 23:27:17