Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从shell文件运行python脚本而不弄乱目录路径_Python_Python 3.x_Shell_Directory - Fatal编程技术网

如何从shell文件运行python脚本而不弄乱目录路径

如何从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

我有一个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(./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文件的父目录。