Я пытаюсь реализовать команду, которая включает отправку запроса 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()
Как видите, они довольно похожи. Есть ли лучший способ или лучшая практика для достижения того, что я хочу?
Обычный метод состоит в том, чтобы иметь один файл с несколькими ссылками, а затем программа проверяет $0.
@WilliamPursell, ... или, в смысле Python, изучите sys.argv[0].
Спасибо! посмотрю на distutils






Почему бы вам не сделать 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 непосредственно из командной строки.
Это хороший подход, я не думал об этом. Спасибо!
python job-tools.py submit, а затем ваш скрипт Python проверяет свои аргументы командной строки. (Еще лучше, пусть distutils/setuptools создают исполняемую оболочку, тогда это простоjob-tools submit, нет необходимости явно вызывать интерпретатор python).