过程
写了个脚本丢服务器里, 每次启动时都要去读取一个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
网友评论