美文网首页Python 运维
Python里使用相对路径的坑

Python里使用相对路径的坑

作者: spencer404 | 来源:发表于2016-08-19 09:56 被阅读1165次

    过程

    写了个脚本丢服务器里, 每次启动时都要去读取一个cache文件

    open('table.cache', 'rb')

    然后为脚本设置了一个软连接, 以后用search命名就能使用脚本了

    ln -s /home/search.py /usr/bin/search

    但是, 启动时却提示未找到cache文件

    FileNotFoundError: [Errno 2] No such file or directory: 'table.cache'

    我猜测它可能去'/usr/bin/search'里找 'table.cache'了, 于是,

    touch /usr/bin/table.cache

    但还是提示找不到文件, 最后猜测, 它可能在当前目录找了, 于是我随便切到一个目录里:

    cd /tmp/.X11-unix/
    touch table.cache
    search

    这下对了!
    Python里写这种相对路径, 是相对于终端的当前目录的.

    解决

    解决办法是, 获取脚本所在目录, 构造绝对路径:

    print('getcwd', os.getcwd())
    print('sysargv', sys.argv)
    print('realpath', os.path.realpath(sys.argv[0]))
    print('realpath.split', os.path.split(os.path.realpath(sys.argv[0]))[0]) # 这是脚本所在目录
    print('__file__', __file__)
    print('__file__.dir', os.path.dirname(__file__)) # 这也是脚本所在目录
    

    将上诉代码保存在 /home/speng/t.py 里, 然后:

    cd /etc/named
    python3 /home/speng/t.py

    输出:

    getcwd /etc/named
    sysargv ['/home/speng/t.py']
    realpath /home/speng/t.py
    realpath.split /home/speng
    __file__ /home/speng/t.py
    __file__.dir /home/speng
    

    相关文章

      网友评论

        本文标题:Python里使用相对路径的坑

        本文链接:https://www.haomeiwen.com/subject/kslbsttx.html