【问题标题】:How to specify where to look for files and path for log files?如何指定在哪里查找文件和日志文件的路径?
【发布时间】:2021-07-07 16:59:40
【问题描述】:

我有一个 Python 脚本,它可能最终位于不同服务器上的不同目录中。我的脚本有 sys.path.insert 行,它在其中查找库,并在与脚本相同的目录中查找 config.ini 文件。我希望能够使用完整路径运行脚本。

example.py:

#!/usr/local/bin/python3.6
import sys, getopt, configparser
sys.path.insert(0, '../lib/')
from myFunctions import mySendmail, remoteFileChkSum, sendfile
...
def main():
    config = configparser.ConfigParser()
    # username and encrupted passwords are in config.ini
    # keys for encryption are in .keys
    config.read('config.ini')
    config.read('.keys')

在某些主机上,该文件位于/export/apps/bin/ 中,而lib 文件夹位于/export/apps/lib 中。在其他主机上,它位于 /export/home/ray/bin 中,lib 文件夹位于 /export/home/ray/lib 中。

什么是最佳实践,以便我可以从任何主机上的任何位置运行脚本?我应该在开头找到脚本的目录/位置并执行os.chdir('<DIR>')吗?

【问题讨论】:

  • 获取当前工作目录如下cwd = os.getcwd()@Ravi
  • @Vishnudev 给了我当前的工作目录。但是我需要脚本所在的目录,因为对 lib 和 config 文件的引用是对那个的引用
  • 当前最佳做法是让您的模块可安装,并让pip 将其数据文件安装到系统相关位置,该位置可以从包的元数据中检索。对于一个快速而肮脏的解决方案,看起来你可以使用pathlib.Path(__file__).parent() / 'lib' / 'config.ini'
  • 如果从命令行启动程序并且使用sys.argv,第一个参数将是程序运行的路径,请参阅this question
  • 您可以使用os.dirname(__file__) 获取当前正在运行的脚本的目录——这是一种非常常见的方法。

标签: python working-directory


【解决方案1】:

这就是我所做的,并且有效。

import os, sys
script_dir = os.path.dirname(os.path.realpath(__file__))
os.chdir(script_dir)

sys.path.insert(0, '../lib/')
from myFunctions import mySendmail, remoteFileChkSum, sendfile

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多