如何从其他目录执行Python文件?实现跨目录调用且不修改目标脚本
解决方案
当然可以搞定!问题的核心其实是工作目录的差异:
- 手动运行
dir/other.py时,你的终端工作目录就是dir/,所以open('data.txt')能直接找到同目录下的文件; - 但从根目录的
main.py启动它时,默认工作目录是根目录,other.py会去根目录找data.txt,自然找不到。
我们完全不需要修改other.py,只需要在启动它的时候,给子进程指定正确的工作目录就行。
具体实现(main.py代码)
用Python自带的subprocess模块来启动other.py,关键是设置cwd参数切换工作目录:
import subprocess import sys # 指向dir目录的路径,用相对路径就够了,或者用绝对路径更稳妥 target_dir = "./dir" # 启动other.py,强制子进程在dir目录下运行 subprocess.run([sys.executable, "other.py"], cwd=target_dir)
为什么这招管用?
- 从
main.py启动时,cwd=target_dir会让子进程的工作目录切换到dir/,这时候other.py里的data.txt相对路径就刚好指向正确的文件; - 手动运行
dir/other.py时,你本来就在dir/目录下操作,完全不受影响,依然能正常读取文件。
更稳妥的写法(避免相对路径坑)
如果担心main.py被从其他目录启动导致路径出错,可以用pathlib获取绝对路径:
import subprocess import sys from pathlib import Path # 获取main.py所在目录的绝对路径,再拼接dir目录 target_dir = Path(__file__).parent / "dir" subprocess.run([sys.executable, "other.py"], cwd=target_dir)
这样不管你从哪个目录运行main.py,都能精准找到dir目录。
内容的提问来源于stack exchange,提问作者ISD
相关产品推荐
相关产品推荐

