Вызов функции Python в скрипте Bash - PullRequest
0 голосов
/ 29 февраля 2020

У меня есть файл Python с именем data.py, который выглядит следующим образом:

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: No module named 'data'. Как я могу заставить run.sh правильно вызывать различные функции Python?

1 Ответ

1 голос
/ 01 марта 2020

Учитывая предоставленную вами информацию, я думаю, что вы должны работать из другого каталога, а не из тех, где находятся эти файлы, т.е. что текущий каталог отличается от того, который содержит run.sh. Если это правильно, добавление следующего в верхней части вашего скрипта должно помочь:

#!/bin/bash

DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
cd $DIR

...rest of bash file...

Это изменит текущий каталог на каталог, в котором находится файл bash.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...