我每分钟从crontab运行一个python shell:
* * * * * /home/udi/foo/bar.py
Run Code Online (Sandbox Code Playgroud)
/home/udi/foo有一些必要的子目录,比如/home/udi/foo/log和/home/udi/foo/config,/home/udi/foo/bar.py指的是.
问题是crontab从不同的工作目录运行脚本,因此尝试打开./log/bar.log失败.
有没有一种很好的方法告诉脚本将工作目录更改为脚本自己的目录?我想要一个适用于任何脚本位置的解决方案,而不是明确地告诉脚本它在哪里.
编辑:
os.chdir(os.path.dirname(sys.argv[0]))
Run Code Online (Sandbox Code Playgroud)
是最紧凑的优雅解决方案.感谢您的回答和解释!
设置
我在我的计算机上运行一个脚本,位于目录Users/path/to/my/script.py.
在脚本中,我使用脚本的路径,例如,
sub_path = 'Users/path/to/my/'
os.chdir(sub_path + 'other_script/')
Run Code Online (Sandbox Code Playgroud)
如您所见,我sub_path在代码中“手动”进行了定义。
问题
我不想sub_path手动定义,我宁愿让 Python 为我做。
我正在寻找类似于我用来获取当前工作目录的代码的东西:os.getcwd(),但是然后是获取当前文件目录的代码。
我主要找到类似于这个的答案,它说,
os.path.abspath(os.path.dirname(__file__))
但在 Spyder & Anaconda 设置中,这会生成NameError: name '__file__' is not defined.
我能做什么?