首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python:将脚本工作目录更改为脚本自己的目录

python:将脚本工作目录更改为脚本自己的目录
EN

Stack Overflow用户
提问于 2009-09-16 13:21:51
回答 4查看 258K关注 0票数 224

我每分钟从crontab运行python shell:

代码语言:javascript
复制
* * * * * /home/udi/foo/bar.py

/home/udi/foo有一些必要的子目录,如/home/udi/foo/log/home/udi/foo/config/home/udi/foo/bar.py引用这些子目录。

问题是crontab从不同的工作目录运行脚本,因此试图打开./log/bar.log失败。

有没有一种很好的方法可以告诉脚本将工作目录更改为脚本自己的目录?我想要一个解决方案,它适用于任何脚本位置,而不是显式地告诉脚本在哪里。

编辑:

代码语言:javascript
复制
os.chdir(os.path.dirname(sys.argv[0]))

是最紧凑、优雅的解决方案。谢谢你的回答和解释!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-09-16 13:26:24

这将将当前工作目录更改为打开相对路径:

代码语言:javascript
复制
import os
os.chdir("/home/udi/foo")

但是,您询问了如何更改Python脚本所在的目录,即使您在编写脚本时不知道该目录是哪个目录。为此,可以使用os.path函数:

代码语言:javascript
复制
import os

abspath = os.path.abspath(__file__)
dname = os.path.dirname(abspath)
os.chdir(dname)

这将获取脚本的文件名,将其转换为绝对路径,然后提取该路径的目录,然后切换到该目录。

票数 271
EN

Stack Overflow用户

发布于 2012-02-03 14:41:28

您可以通过使用sys.path[0]获得一个较短的版本。

代码语言:javascript
复制
os.chdir(sys.path[0])

来自http://docs.python.org/library/sys.html#sys.path

在程序启动时初始化的

,此列表的第一项path[0]是包含用于调用

解释器的脚本的目录。

票数 57
EN

Stack Overflow用户

发布于 2009-09-16 13:34:21

不要这样做。

您的脚本和数据不应该被合并到一个大目录中。将您的代码放在某个已知位置(site-packages/var/opt/udi或其他什么地方),与您的数据分开。对代码使用良好的版本控制,以确保当前和以前的版本相互分离,这样您就可以回到以前的版本并测试未来的版本。

底线:不要将代码和数据混在一起。

数据是宝贵的。密码来来去去。

将工作目录作为命令行参数值提供。您可以提供默认的环境变量。不要推断(或猜测)

使其成为必需的参数值并执行此操作。

代码语言:javascript
复制
import sys
import os
working= os.environ.get("WORKING_DIRECTORY","/some/default")
if len(sys.argv) > 1: working = sys.argv[1]
os.chdir( working )

不要根据软件的位置来“假设”一个目录。从长远来看,这不会有好结果的。

票数 27
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1432924

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档