如何指定工作目录运行Python脚本(无需切换目录)
问题
简而言之:期望实现如下效果:
python3.5 --working-dir=~/company_repo/ ~/company_repo/something.py
公司有由对应团队维护的Python脚本;我的bash脚本会按顺序调用这些脚本:
myscript.sh
python3.5 ~/company_repo/scripts/helper1.py someargument python3.5 ~/company_repo/scripts/helper2.py
部分公司脚本依赖于在公司代码仓库目录下运行,因为它们会调用git命令或通过相对路径加载文件。我无法修改这些公司脚本。
是否有办法让Python运行时使用不同的工作目录?我不想在bash脚本中执行cd ~/company_repo操作。
解决方案
方法1:子shell临时切换目录执行
用括号创建子shell,在子shell内切换目录后执行Python命令,不会改变当前shell的工作目录:
(cd ~/company_repo && python3.5 scripts/helper1.py someargument) (cd ~/company_repo && python3.5 scripts/helper2.py)
方法2:Python包装脚本切换工作目录
写一个简单的包装脚本,先切换工作目录再执行目标脚本,避免修改原公司脚本:
创建run_in_cwd.py:
import os import sys import importlib.util if len(sys.argv) < 3: print("Usage: python run_in_cwd.py <working_dir> <script_path> [args...]") sys.exit(1) working_dir = sys.argv[1] script_path = sys.argv[2] script_args = sys.argv[3:] os.chdir(working_dir) sys.argv = [script_path] + script_args spec = importlib.util.spec_from_file_location("__main__", script_path) module = importlib.util.module_from_spec(spec) spec.loader.exec_module(module)
bash脚本中调用方式:
python3.5 run_in_cwd.py ~/company_repo ~/company_repo/scripts/helper1.py someargument python3.5 run_in_cwd.py ~/company_repo ~/company_repo/scripts/helper2.py
方法3:使用env命令(GNU环境适用)
GNU版本的env支持-C参数,可直接指定工作目录执行命令:
env -C ~/company_repo python3.5 scripts/helper1.py someargument
内容的提问来源于stack exchange,提问作者Tomáš Zato
相关产品推荐
相关产品推荐

