在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代码的内容: