Shell Script: выполнение программы на Python из сценария оболочки - PullRequest
96 голосов
/ 07 декабря 2010

Я попытался найти ответ в Google, но безуспешно.

Мне нужно использовать сервер суперкомпьютера Works, но для запуска сценария python его необходимо выполнить с помощью сценария оболочки.

Например, я хочу, чтобы job.sh выполнил python_script.py

Как это можно сделать?

Ответы [ 9 ]

142 голосов
/ 07 декабря 2010

Просто убедитесь, что исполняемый файл python находится в переменной среды PATH, а затем добавьте в свой скрипт

python path/to/the/python_script.py

подробности:

  • В файле job.sh поместите это
#!/bin/sh
python python_script.py
  • Выполните эту команду, чтобы сделать скрипт доступным для вас: chmod u+x job.sh
  • Запустите его: ./job.sh
91 голосов
/ 07 декабря 2010

Способ 1 - создание сценария оболочки:

Предположим, у вас есть файл Python hello.py Создайте файл с именем job.sh, который содержит

#!/bin/bash
python hello.py

отметьте его как исполняемый с помощью

$ chmod +x job.sh

затем запустите

$ ./job.sh

Метод 2 (ЛУЧШЕ) - заставить сам питон запускаться из оболочки:

Измените ваш скрипт hello.py и добавьте его в качестве первой строки

#!/usr/bin/env python

отметьте его как исполняемый с помощью

$ chmod +x hello.py

затем запустите

$ ./hello.py
10 голосов
/ 07 декабря 2010

Имхо, пишу

python /path/to/script.py

Совершенно неправильно, особенно в наши дни. Какой питон? python2.6? 2,7? 3,0? 3,1? В большинстве случаев вам нужно указывать версию python в теге shebang файла python. Я рекомендую использовать

#!/usr/bin/env python2 #or python2.6 or python3 or even python3.1
для совместимости.

В таком случае гораздо лучше иметь исполняемый скрипт и вызывать его напрямую:

#!/bin/bash

/path/to/script.py

Таким образом, нужная вам версия python записана только в одном файле. В настоящее время большинство систем используют python2 и python3, и бывает, что символическая ссылка python указывает на python3 , тогда как большинство людей ожидают, что она указывает на python2 .

4 голосов
/ 12 сентября 2016

Это работает для меня:

  1. Создать новое задание файла оболочки.Итак, давайте скажем: touch job.sh и добавим команду для запуска скрипта Python (вы даже можете добавить аргументы командной строки к этому питону, я обычно заранее задаю аргументы командной строки).

    chmod +x job.sh

  2. Внутри job.sh добавьте следующие py-файлы, скажем:

    python_file.py argument1 argument2 argument3 >> testpy-output.txt && echo "Done with python_file.py"

    python_file1.py argument1 argument2 argument3 >> testpy-output.txt && echo "Done with python_file1.py"

Вывод задания.sh должен выглядеть следующим образом:

Done with python_file.py

Done with python_file1.py

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

Примечание: Просто кратко расскажу о том, что здесь происходит:

python_file.py argument1 argument2 argument3 >> testpy-output.txt && echo "completed with python_file.py" . 

  • Здесь скрипт оболочки будет запускать файл python_file.py и добавьте несколько командных строк arguments во время выполнения в файл python.
  • Это не обязательно означает, что вы также должны передавать аргументы командной строки.
  • Вы можете просто использовать его как: python python_file.py, просто и понятно.Затем >> распечатает и сохранит выходные данные этого файла .py в файле testpy-output.txt.
  • && - это логический оператор, который будет работать только после успешного выполнения вышеизложенного и в качестве необязательного echo"дополненный python_file.py" будет отображатьсяВаш Cli / Terminal во время выполнения.
4 голосов
/ 21 июля 2015

Это лучше всего работает для меня: Добавьте это вверху скрипта:

#!c:/Python27/python.exe

(C: \ Python27 \ python.exe - это путь к python.exe на моей машине) Затем запустите скрипт через:

chmod +x script-name.py && script-name.py
4 голосов
/ 07 декабря 2010

вы должны быть в состоянии вызвать его как pythonисполняемый с помощью chmod u + x scriptname.py

РЕДАКТИРОВАТЬ: битый к нему: -p

3 голосов
/ 08 марта 2018

Сохраните следующую программу как print.py:

#!/usr/bin/python3
print('Hello World')

Затем в терминале:

chmod +x print.py
./print.py
2 голосов
/ 29 декабря 2017

Я использую это, и он отлично работает

#/bin/bash
/usr/bin/python python python_script.py
1 голос
/ 05 сентября 2018

Так как другие посты говорят все (и я наткнулся на этот пост, ища следующее).
Вот способ выполнения скрипта Python из другого скрипта Python:

Python 2:

execfile("somefile.py", global_vars, local_vars)

Python 3:

with open("somefile.py") as f:
    code = compile(f.read(), "somefile.py", 'exec')
    exec(code, global_vars, local_vars)

и выможет поставлять аргументы, предоставляя некоторые другие sys.argv

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