如何从shell文件运行python脚本而不弄乱目录路径
我有一个python脚本,它使用相对路径加载数据文件。 然后,我有一个来自父目录的shell脚本,它像这样运行python脚本 自动化.sh内容:如何从shell文件运行python脚本而不弄乱目录路径,python,python-3.x,shell,directory,Python,Python 3.x,Shell,Directory,我有一个python脚本,它使用相对路径加载数据文件。 然后,我有一个来自父目录的shell脚本,它像这样运行python脚本 自动化.sh内容: python3 /path/to/python/file/file.py import numpy as np np.loadtxt(./data/data2load.txt) file.py内容: python3 /path/to/python/file/file.py import numpy as np np.loadtxt(./da
python3 /path/to/python/file/file.py
import numpy as np
np.loadtxt(./data/data2load.txt)
file.py内容:
python3 /path/to/python/file/file.py
import numpy as np
np.loadtxt(./data/data2load.txt)
问题是当我从shell脚本运行这个python脚本时,相对路径被破坏了。它尝试在/path/to/shell/script/data/data2load.txt中查找要加载的文件。
有没有一种不使用绝对路径的健壮方法来解决这个问题
我目前的修复程序在我的automatic.sh中,我改为写:
cd /path/to/python/file
python3 file.py
cd ../../../..
但这显然非常乏味您应该能够做到以下几点:
import os
BASE_DIR = os.path.dirname(os.path.realpath(__file__))
DATA_PATH = os.path.join(BASE_DIR, "data/data2load.txt")
DATA_PATH的值现在将是/PATH/to/python/file/DATA/data2load.txt,因此:
应始终加载正确的文件。谢谢。只是确认一下,BASE_DIR是否设置为“调用python脚本”的目录?在这种情况下,它是shell脚本的目录?是的,_file_uuu始终设置为脚本本身的完整路径,因此BASE_DIR将是.py文件的父目录。