在Bash脚本中调用Python函数
我有一个名为在Bash脚本中调用Python函数,python,bash,Python,Bash,我有一个名为data.py的Python文件,它如下所示: import json def txtToJson(textfile): #rest of the code def jsontToTxt(jsonfile): #rest of the code 我还得到了一个run.sh文件来调用Python文件中的每个函数。我尝试过这样做: #!/bin/bash if [ "$1" = '-s' ] then if [ "$2" = '-j' ] the
data.py
的Python文件,它如下所示:
import json
def txtToJson(textfile):
#rest of the code
def jsontToTxt(jsonfile):
#rest of the code
我还得到了一个run.sh
文件来调用Python文件中的每个函数。我尝试过这样做:
#!/bin/bash
if [ "$1" = '-s' ]
then
if [ "$2" = '-j' ]
then
##Serialize JSON
python -c "import data; print(data.txtToJson($3))"
fi
elif [ "$1" = '-d' ]
then
if [ "$2" = '-j' ]
then
##Deserialize JSON
python -c "import data; print(data.jsonToText($3))"
fi
fi
但是,当我尝试运行脚本时,我得到一个
ModuleNotFoundError:没有名为“data”的模块
。如何让run.sh
正确调用不同的Python函数?根据您提供的信息,我认为您一定是从这些文件所在的另一个目录运行的,即当前目录与包含run.sh
的目录不同。如果这是正确的,那么在脚本顶部添加以下内容应该会有所帮助:
#!/bin/bash
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
cd $DIR
...rest of bash file...
这会将当前目录更改为bash文件所在的目录。其中是相对于
run.sh
的data.py
,以及相对于调用run.sh
的目录。使用argparse模块定义命令行参数(标志)对于您的脚本和bash脚本,只需写下类似于python data.py--file=/path/to/file--text_to_json
@mkrieger1 run.sh和data.py在同一个目录中,那么我问题的第二部分呢?但是当您运行run.sh
时,当前的目录是什么?您是像/run.sh
那样运行它,还是像/some dir/run.sh
那样运行它?这里可以阅读更多关于这段bash代码的内容: