如何通过setup.cmd仅在src目录创建files目录且正常运行Python脚本?
解决方法
问题根源在于:当你在build目录下直接运行python "..\src\main.py"时,Python的工作目录还是build,如果main.py里有用相对路径创建files目录的代码(比如os.mkdir("files")),就会在当前工作目录(也就是build)下生成目录,加上你手动执行的mkdir "..\src\files",就导致两个目录都被创建了。
下面是几种可行的解决方式:
方式1:先切换工作目录到src再执行所有命令
修改setup.cmd内容为:
@echo off rem 切换到src目录(%~dp0表示当前cmd文件所在的build目录的绝对路径) cd /d "%~dp0..\src" rem 在src目录下创建files mkdir "files" rem 运行main.py,此时工作目录是src python "main.py"
这种方式让所有操作都基于src目录执行,不管是手动创建目录还是脚本里的路径,都会指向src\files。
方式2:修改main.py中的路径为绝对路径
如果main.py里有创建files目录的逻辑,把相对路径改成基于脚本自身位置的绝对路径,这样不管从哪个目录运行脚本,都会在src下创建目录:
import os # 获取main.py所在的目录(也就是src目录) script_path = os.path.abspath(__file__) src_dir = os.path.dirname(script_path) # 拼接files目录的绝对路径 files_dir = os.path.join(src_dir, "files") # 检查并创建目录 if not os.path.exists(files_dir): os.makedirs(files_dir)
修改后,即使从build目录运行python "..\src\main.py",脚本也会在src目录下创建files,不会影响build目录。
方式3:临时切换工作目录执行Python脚本
如果不想修改main.py,可以在setup.cmd中用pushd和popd临时切换到src目录执行脚本,执行完后回到原目录:
@echo off rem 先在src目录创建files mkdir "..\src\files" rem 临时切换到src目录 pushd "%~dp0..\src" rem 运行脚本 python "main.py" rem 回到原来的build目录 popd
内容的提问来源于stack exchange,提问作者Rory Poulter
相关产品推荐
相关产品推荐

