【问题标题】:Python script on linux and autostart at boot pathLinux 上的 Python 脚本并在引导路径自动启动
【发布时间】:2012-12-30 12:34:34
【问题描述】:

我用 Python 编写了一个脚本,它可以正常工作。 由于我添加了一个配置文件(我使用了解析器),它在启动时停止启动(我在我的 rc.local 文件中有它的绝对路径)。

进一步调查我发现我需要在python脚本中指定配置文件的绝对路径,否则它不起作用。

我喜欢它只检查脚本文件所在的文件夹。

我的意思是:

如果我的 script.py 在主文件夹中,我希望它在同一文件夹中检查其配置文件...如果它在 /home/user 中,我希望它检查 /home/user。

记住 rc.local 是由 root 用户使用一些不同于我的普通用户的 ENV 变量运行的,我该如何实现这一点?

【问题讨论】:

    标签: python bash


    【解决方案1】:

    作为上述 Martijn 答案的替代方案,您可以简单地修改 rc.local 文件以将当前工作目录更改为脚本的目录,然后在没有绝对路径的情况下运行它。这不需要您修改 Python 脚本本身。

    换句话说,将您的 rc.local 更改为:

    python /home/user/your_script.py
    

    pushd /home/user
    python your_script.py
    popd
    

    【讨论】:

    【解决方案2】:

    基于__file__ 变量的路径:

    import os.path
    scriptpath = os.path.abspath(os.path.dirname(__file__))
    
    configfile = os.path.join(scriptpath, configfilename)
    

    【讨论】:

    • 我已经尝试过这个解决方案,但行为保持不变:如果我手动加载脚本,脚本可以完美运行,如果我将它放在 rc.local 中将无法运行
    • @Pitto:当您从 rc.local 运行脚本时,scriptpath 的值是多少?错误还是一样吗?
    • 这是一个非常好的问题!我怎样才能检查它?关于 rc.local 的主要痛苦是我无法轻易理解那里出了什么问题......如果我手动运行 /etc/rc.local 它可以正常工作,但在重新启动时脚本没有运行(我'我试过 ps aux | grep script.py)
    • @Pitto:使用open('/tmp/myscript.log', 'a').write('scriptpath: {0}\n'.format(scriptpath)),然后在创建后查看/tmp/myscript.log
    • @Pitto:那么要么你的代码根本没有运行,要么你的代码有另一个错误。
    猜你喜欢
    • 1970-01-01
    • 2018-11-08
    • 2020-02-04
    • 2018-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多