Сценарій оболонки: виконайте програму python із скрипту оболонки


139

Я спробував гугла відповідь, але не пощастило.

Мені потрібно використовувати суперкомп'ютерний сервер моїх робіт, але щоб мій сценарій python був запущений, він повинен бути виконаний за допомогою сценарію оболонки.

Наприклад, я хочу job.shвиконатиpython_script.py

Як це можна досягти?


2
Ви намагалися просто ввести python python_script.pyсценарій оболонки?
thkala

Um, python python_script.py. Або просто, ./python_script.pyякщо сценарій отримав шебанг.

2
@delnan: ./python_script.py також вимагає, щоб сценарій виконувався
thkala

що саме ви спробували і в чому проблема? Або ти не зробив цього добра в пошуку в Google, або є багато, що ти нам не кажеш ...
thkala

3
Це досить старе питання, але найкраща / найповніша відповідь - це Жоао Віктор. Обов’язково прочитайте його.
Ще. Тоні

Відповіді:


193

Просто переконайтеся, що виконуваний файл 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 --version, а версію можна застосувати python3 hello.py.
Жан-Бернар Янсен

Що робити, якщо він не знайде вже встановленого імпорту, наприклад панди?
mah65

Це означає, що ви запустили неправильний бінарний пітон або навколишнє середовище невірно. У такому випадку вам слід заповнити 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?
Кейслінгер

111

Спосіб 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. Не забудьте переконатися, що ви посилаєтеся на правильну версію пітона + шлях для вашої системи!
Все-таки.Тоні

10

Імхо, писав

python /path/to/script.py

Це зовсім неправильно, особливо в ці дні. Який пітон? python2.6? 2,7? 3,0? 3.1? Найчастіше вам потрібно вказати версію python у тезі shebang файлу python. Я заохочую до використання

#! / usr / bin / env python2 #or python2.6 або python3 або навіть python3.1
на сумісність.

У такому випадку набагато краще мати сценарій виконуваним і безпосередньо викликати його:

#! / бін / баш

/path/to/script.py

Таким чином потрібна версія python записується лише в один файл. Більшість систем у цей час мають python2 та python3 тим часом, і трапляється, що python symlink посилається на python3 , тоді як більшість людей очікує, що це вказує на python2 .


1
Чи можете ви передавати параметри так само, як і python script.py param?
Крістіан

@kristian так./abc.py -h

7

Збережіть таку програму як print.py:

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

Потім у термінальному типі:

chmod +x print.py
./print.py

4

Для мене це найкраще: додайте це вгорі сценарію:

#!c:/Python27/python.exe

(C: \ Python27 \ python.exe - шлях до python.exe на моїй машині). Потім запустіть сценарій через:

chmod +x script-name.py && script-name.py

Просто для уточнення, це специфічно для Windows. І підказка, яку я використовую, - це Git bash. Я вважаю це супер корисним. Особливо в середовищі Windows
peterb

4

Це працює для мене:

  1. Створіть нове завдання з файлом оболонки. Отже, скажімо: touch job.shі додай команду для запуску сценарію python (до цього 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" буде повторено на ваш кліп / термінал під час виконання.

4

Ви повинні мати можливість викликати це, python scriptname.pyнаприклад

# !/bin/bash

python /home/user/scriptname.py 

Також переконайтеся, що сценарій має дозволи на запуск.

Ви можете зробити його виконуваним за допомогою chmod u+x scriptname.py.


2

Я використовую це, і це прекрасно працює

#/bin/bash
/usr/bin/python python python_script.py

1

Оскільки в інших публікаціях сказано все (і я натрапив на цю посаду, шукаючи наступне).
Ось спосіб виконання сценарію python з іншого сценарію python:

Пітон 2:

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

Пітон 3:

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

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.