Ran*_*ndy 4 shell cd-command python
我有一个 Python 脚本,可以在相对目录中查找文件。例如:Python 脚本在/home/username/projectname/. 我有一个在 Python 脚本中调用的文件,该文件位于/home/username/projectname/subfolder.
如果我从 shell 运行脚本,因为python scriptname.py它运行得非常好。
但是,我正在尝试将该脚本作为启动服务运行。我在 webmin 中设置它,我相信它创建了一个 shell 脚本来调用它。通过启动脚本,我正在做这样的事情来调用脚本:
execute python home/username/projectname/scriptname.py
Run Code Online (Sandbox Code Playgroud)
脚本启动正常,但无法访问相关目录中的文件。
我猜有一种更好的方法可以从启动脚本中调用 Python 程序,以便它知道相对路径。
bah*_*mat 10
又快又脏:
在您的启动脚本中,而不是仅仅执行 python 脚本,cd首先使用。
#!/bin/sh
cd /home/username/projectname &&
python ./scriptname.py
Run Code Online (Sandbox Code Playgroud)
有几种方法可以直接在您的 Python 脚本中解决此问题。
如果您的脚本始终位于“/home/username/projectname/subfolder”中,您只需将其添加到 Python 中的搜索路径中即可:
import sys
sys.path.append("/home/username/projectname/subfolder")
Run Code Online (Sandbox Code Playgroud)
但是,我怀疑您可能在多个“projectname”目录中有这个,所以更通用的解决方案是这样的:
import sys
import os
sys.path.append(os.path.join(os.path.dirname(sys.argv[0]), "subfolder"))
Run Code Online (Sandbox Code Playgroud)
这将找到 Python 脚本所在的目录(在 中sys.argv[0]),提取目录部分,将“子文件夹”附加到其上,并将其放入搜索路径中。
请注意,某些操作系统可能仅在sys.argv[0]. 对于这种情况,我没有很好的解决方案,也许其他人有。os.path.abspath()如果sys.argv[0]有相对路径,您可能还需要在那里注入一个调用,但稍微尝试一下,您应该能够让它工作。
与上述答案类似,您可以让 Python 脚本自行更改目录,而无需包装脚本:
import os
os.chdir("/home/username/projectname")
Run Code Online (Sandbox Code Playgroud)一种更快、更脏的方法(使用子外壳):
$ ( cd my/path/to/folder && python myprogram.py )
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
66758 次 |
| 最近记录: |