Вызов сценария Python из сценария оболочки bash

Я пытаюсь реализовать команду, которая включает отправку запроса POST/GET на удаленный сервер и интерпретацию результата формата JSON. Поскольку парсить JSON через bash довольно сложно, я решил сначала написать скрипт на Python и вызвать его в скрипте оболочки.

Мой сценарий оболочки теперь выглядит так

#!/bin/sh
case $1 in
  submit-job)
    python3 src/submit-job.py
    ;;
  lists-job)
    python3 src/lists-job.py
    ;;
  ....and so on
esac

Я надеюсь, что мои пользователи смогут использовать эту команду следующим образом.

Job submit-job argument1 argument2...
Job lists-job
...and so on

В принципе. У меня есть только один файл класса Python с именем Job.py, включающий несколько функций, таких как submit-job и lists-job. Однако, чтобы разделить разные функции на другой аргумент команды, мне нужно создать отдельные файлы python для его запуска. (например, submit-job.py и lists-job.py).

Например. отправить-job.py

from Job import Job

j = Job()
j.submit_job()

списки-job.py

from Job import Job

j = Job()
j.lists_job()

Как видите, они довольно похожи. Есть ли лучший способ или лучшая практика для достижения того, что я хочу?

python job-tools.py submit, а затем ваш скрипт Python проверяет свои аргументы командной строки. (Еще лучше, пусть distutils/setuptools создают исполняемую оболочку, тогда это просто job-tools submit, нет необходимости явно вызывать интерпретатор python).
Charles Duffy 17.06.2019 22:50

Обычный метод состоит в том, чтобы иметь один файл с несколькими ссылками, а затем программа проверяет $0.

William Pursell 17.06.2019 22:50

@WilliamPursell, ... или, в смысле Python, изучите sys.argv[0].

Charles Duffy 17.06.2019 22:50

Спасибо! посмотрю на distutils

Coda Chang 18.06.2019 21:57
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
4
257
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Почему бы вам не сделать if/else в Python?

import sys
from Job import Job

j = Job()
arg = sys.argv[1]
if arg == 'submit-job':
    j.submit_job()
elif ...
    ...

Теперь вы можете вызвать это из сценария bash, передав аргумент, или даже удалить уже существующий сценарий bash и вызвать сценарий Python непосредственно из командной строки.

Это хороший подход, я не думал об этом. Спасибо!

Coda Chang 17.06.2019 23:01

Другие вопросы по теме