Как выполнить программу python с помощью shell-скрипта (и makefile?)



Я прочитал множество учебников и вопросов/ответов stackex, но, по-видимому, мои вопросы слишком конкретны, а мои знания слишком ограничены, чтобы собрать вместе решение.



[править] мое замешательство было вызвано главным образом тем, что мой проект требовал как сценария оболочки, так и файла makefile для запуска простой программы на python. Я не был уверен, почему это было необходимо,так как это казалось таким окольным путем. Похоже, что файл makefile и скрипт, скорее всего, просто есть чтобы сделать автографиста счастливым, о чем упоминали ниже добрые респонденты. Так что, я думаю, это лучше всего прояснить с профессором. Я действительно ценю ответы-большое спасибо за помощь!



В принципе, то, что я хочу сделать, это запустить program.py (мой исходный код) через program.sh (shell script), чтобы при вводе следующего в командной строке



./program.sh arg1


Он запускает program.py и передает arg1 в программу, как если бы я вручную ввел в команду следующее строка



$ python program.py arg1


Мне также нужно автоматически установить program.sh в исполняемый файл, так что $ chmod +x program.sh не нужно вводить заранее.



Я прочитал решение, представленное здесь, что было очень полезно, но это, кажется, требует, чтобы файл был выполнен с расширением .py, в то время как мое конкретное приложение требует расширения .sh, чтобы быть запущенным, как указано выше.



Еще одна причина, по которой я хотел бы запустить файл .sh, заключается в том, что мне также нужно как-то включите файл makefile для запуска программы вместе со сценарием (поэтому я предполагаю, что мне придется включить в сценарий команду make?).



Честно говоря, я не уверен, почему файл makefile необходим для программ на python, но мы были проинструктированы профессором, что файл makefile будет просто более удобен для сценариев оценивания, и что мы должны просто написать следующее для содержимого файла makefile:



all:
/bin/true


Заранее большое спасибо за любую помощь в этом деле!
893   2  

2 ответов:

Вы можете написать свой скрипт оболочки, чтобы вызвать свой скрипт python с помощью:

$ python your_program.py $1

Если вам нужно передать только один аргумент скрипту python, предполагая, что в этом аргументе не будет пробелов.

Если вам нужен makefile,вы можете сделать его исполняемым для вашего скрипта оболочки.

Учитывая, что файл makefile предназначен для удобства сценариев оценивания, я сомневаюсь, что вам нужно добавлять вызов к нему в свой сценарий, но я бы проверил это. Вероятно, то, что делает сценарий оценивания это:

$ make
$ ./your_script.sh 

Вы не можете установить что-то в исполняемый файл, не запустив что-то; и поскольку одного раза достаточно, вы можете просто сделать это вручную. (Это то, что все мы делаем с любыми файлами, которые не генерируются автоматически.)

Вы можете выполнить программу Python двумя способами (и то же самое касается любого другого интерпретируемого языка):

1) Запустите интерпретатор явно: python program1.py arg1, который найдет интерпретатор Python по умолчанию (обычно /usr/bin/python) и попросит его запустить ваш сценарий

2) префикс скрипта с волшебным комментарием "hashbang" и сделайте скрипт исполняемым: если вы поместите в первую строку #!/usr/bin/python и выполните chmod a+x program1.py (Сделайте program1.py исполняемым для всех), то каждый раз, когда вы набираете ./program.py arg1, это будет так, как если бы вы запускали /usr/bin/python program1.py args1. Как я уже говорил, вам нужно сделать это только один раз.

Вы можете использовать оба стиля в обоих сценариях оболочки и Makefile одинаково; нет необходимости в отдельном файле sh.


Кроме того, файл Makefile, которым вы являетесь инструктаж иметь не имеет смысла, так как он ничего не делает. Возможно, ваш профессор намеревается заменить его своим собственным, или может быть какое-то другое объяснение, но all: /bin/true само по себе не имеет смысла.


Если вы действительно хотите иметь скрипт оболочки, который будет передавать все свои аргументы скрипту python, вот он:

#!/bin/sh

python program1.py "$@"

Comments

    Ничего не найдено.