python - 在 python 上使用临时工作目录
问题描述
它可以在 python 上设置 workdir (os.chdir('path')) 像设置局部变量一样吗?我的意思是,只有在调用函数时才可以使用不同的目录?
即我有:
foo_function
|
module1---a.json
| |
| b.csv
|
module2---a.json
| |
| b.csv
module3
我想要(示例):
my_path_1 = '/module1/'
my_path_2 = '/module2/'
def foo(a,b,my_path):
os.chdir('my_path')
os.mkdir('csv')
os.mkdir('json')
shutil.move(a+'.json','json')
shutil.move(b+'.csv','csv')
现在,例如,如果我调用删除模块 3 的函数 B,只需删除它,而不使用“my_path”的新目录来搜索模块 3(最后一次调用 foo)
解决方案
您可以创建一个上下文管理器来执行此操作:
@contextlib.contextmanager
def temp_chdir(path):
prev = os.getcwd()
os.chdir(path)
try:
yield
finally:
os.chdir(prev)
with temp_chdir("~/some_dir"):
funcion_a()
或做一个装饰器
def chdir_dec(path):
def decorator(fn):
@wraps(fn)
def _fn(*args, **kwargs):
with temp_chdir(path):
return fn(*args, **kwargs)
return _fn
return decorator
# example ...
@chdir_dec('../some_path')
def function_a():
os.system("ls")
推荐阅读
- .net - Dynamically created form values persisting after postback
- javascript - 当我尝试将其发送到服务器时,graphql-upload 数据不起作用
- git - Git权限被拒绝,但可以通过git shell ssh
- jquery - ajax请求后重定向
- jquery - 你如何迭代数组中的对象?
- cassandra - 在 Snaplogic Script Snap 中使用第三方库
- sql - 作为惰性规则视图的一部分插入多个表时如何返回
- c# - 按下取消按钮后如何不执行任何操作
- c# - 改装 / API / HTTPS 连接:在标头上添加密码 - 这安全吗?
- asp.net-web-api - 如何为特定 ID 创建多产品