Сценарий оболочки: выполнение программы на Python из сценария оболочки.

152

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

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

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

Как этого добиться?

Harpal
источник
2
Вы пробовали просто python python_script.pyвставить свой сценарий оболочки?
thkala
Um, python python_script.py. Или просто ./python_script.pyесли в сценарии есть шебанг.
2
@delnan: ./python_script.py также требует, чтобы скрипт был исполняемым
thkala
что именно пробовали и в чем проблема? Либо вы не сделали этого хорошего в поиске в Google, либо вы многое нам не рассказываете ...
thkala
3
Это довольно старый вопрос, но лучший / самый полный ответ - это вопрос Жуана Виктора. Обязательно прочтите до нее.
Still.Tony

Ответы:

207

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

python path/to/the/python_script.py

Детали:

  • В файле job.sh поместите это
#!/bin/sh
python python_script.py
  • Выполните эту команду, чтобы скрипт работал за вас: chmod u+x job.sh
  • Запустить его : ./job.sh
Жан-Бернар Янсен
источник
2
Это зависит от вашей системы. Python 3 может быть средой выполнения Python по умолчанию, а может и не быть. Вы можете проверить, запустив python --version, а можете принудительно установить версию с помощью python3 hello.py.
Жан-Бернар Янсен
Что делать, если не находит уже установленный импорт, например панды?
mah65
Это означает, что вы запустили неправильный двоичный файл python или среда не подходит. В этом случае вы должны заполнить virtualenv, затем запустить и source PATH/TO/VENV/bin/activateпозвонитьpython python_script.py
Жан-Бернар Янсен
Пытаюсь сделать это в автомате, но получаю ошибку; /path/to/Python: can't open file '/path/to/script': [Errno 1] Operation not permittedесть ли способ включить мой код Python в строку сценария bash?
Кейслингер,
это работает отлично, спасибо
Нео
116

Метод 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
Жуан Виктор
источник
5
Измените свой ответ, чтобы сделать его более читабельным. Вы можете использовать кнопку 101010 в редакторе ответов, чтобы пометить содержимое скрипта как код.
thkala
1
Я всегда забываю #!/usr/bin/env python. Не забудьте убедиться, что вы ссылаетесь на правильную версию python + путь для вашей системы!
Still.Tony
10

Имхо, пишу

python /path/to/script.py

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

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

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

#! / bin / bash

/path/to/script.py

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

Энрико Карлессо
источник
1
Можно ли передавать параметры так же, как с python script.py param?
Кристиан
@kristian yes./abc.py -h
8

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

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

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

chmod +x print.py
./print.py
Нишант Ингл
источник
5

Вы должны иметь возможность вызывать его, python scriptname.pyнапример,

# !/bin/bash

python /home/user/scriptname.py 

Также убедитесь, что у сценария есть разрешения на запуск.

Вы можете сделать его исполняемым, используя chmod u+x scriptname.py.

Шпонгл
источник
4

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

#!c:/Python27/python.exe

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

chmod +x script-name.py && script-name.py
Питер
источник
Чтобы уточнить, это зависит от Windows. И подсказка, которую я использую, - это Git bash. Я считаю это очень полезным. Особенно в среде Windows
петербург
4

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

  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"

Результат работы job.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 и добавит несколько аргументов командной строки во время выполнения в файл python.
  • Это не обязательно означает, что вы также должны передавать аргументы командной строки.
  • Вы можете просто использовать это как:, python python_file.pyпросто и понятно. Затем >> напечатает и сохранит вывод этого файла .py в файле testpy-output.txt.
  • && - это логический оператор, который будет запускаться только после успешного выполнения вышеупомянутого, и в качестве необязательного эха "завершено с помощью python_file.py" будет отражено на вашем кли / терминале во время выполнения.
geekidharsh
источник
2

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

#/bin/bash
/usr/bin/python python python_script.py
Макс Хэй
источник
1

Поскольку другие сообщения говорят все (и я наткнулся на этот пост, ища следующее).
Вот способ, как выполнить скрипт 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

dCSeven
источник