Запуск python скрипта в linux

Привет. Читаю книгу A Byte of Python. Там на 32й странице http://wombat.org.ua/AByteOfPython/AByteofPythonRussian-2.01.pdf создается своя команда helloworld и с помощью нее можно вызывать файл helloworld.py из любого места. К примеру просто py/helloworld.py у меня получается запускать, а вот как сделать свою команду не пойму. Знаю есть alies, но в книге как-то иначе делается. Кто подскажет как повторить пример? И чем отличается от alies?

3 ответа 3

Как запускать файл Python из любого места в Ubuntu?

Также как и любую другую программу:

файл должен быть в одной из директорий, указанной в $PATH

файл должен быть исполняемым

файл должен содержать корректную shebang строку на самом верху, например:

/bin директория находится в $PATH , то можно symlink создать:

После этого можно запускать helloworld из любой директории:

В качестве альтернативы, чтобы автоматически создать исполняемый файл в пути из helloworld.py можно использовать setup.py файл:

Код для запуска следует в main() функцию поместить.

Чтобы инсталлировать скрипт (из директории с setup.py ):

Если вы не используете virtualenv, тогда можно добавить —user опцию, чтобы локально для текущего пользователя поставить:

/.local/bin в путь ( $PATH переменная окружения) в этом случае.

После этого можно запускать helloworld из любой директории:

А в чем отличие этого подхода от alies?

У вас есть скрипт, с помощью которого вы получаете данные каждый день. Например из API яндекс директ или google analytics. Вы хотите автоматизировать это действие, вам надоело вручную каждый день запускать скрипт. Для этого в linux есть планировщик задач cron.

Cron — это сервис, как и большинство других сервисов Linux, он запускается при старте системы и работает в фоновом режиме. Его основная задача выполнять нужные процессы в нужное время. Регулярные действия описываются инструкциями, помещенными в файлы crontab и в специальные директории.

Читайте также:  Добавить в path что это

Для того, чтобы отредактировать файл crontab нужно ввести в консоль команду

у меня проблема со следующим кодом:

callBash.py:

sleep.sh:

Я хочу, чтобы" конец " был напечатан после 10 секунд. (Я знаю, что это глупый пример, я мог бы просто спать в python, но это просто sleep.sh файл был просто как тест)

7 ответов

изготовление sleep.sh исполняемый файл и добавление shell=True в список параметров (как предлагалось в предыдущих ответах) работает нормально. В зависимости от пути поиска, вам также может потребоваться добавить ./ или другой соответствующий путь. (Т. е. изменить "sleep.sh" to "./sleep.sh" .)

на shell=True параметр не требуется (в системе Posix, такой как Linux), если первая строка скрипта bash является путем к оболочке; например, #!/bin/bash .

На самом деле, вам просто нужно добавить :

но будьте осторожны —

предупреждение вызов системной оболочки с shell=True может представлять угрозу безопасности в сочетании с ненадежным вводом. Дополнительные сведения см. в предупреждении в разделе Часто используемые аргументы.

если sleep.sh имеет shebang #!/bin/sh и он имеет соответствующие права доступа к файлам — run chmod u+rx sleep.sh чтобы убедиться, и это в $PATH тогда ваш код должен работать как есть:

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

если в скрипте нет shebang, вам нужно указать shell=True :

если у скрипта нет исполняемых разрешений, и вы не можете измените его, например, запустив os.chmod(‘sleep.sh’, 0o755) тогда вы можете прочитать скрипт в виде текстового файла и передать строку в subprocess модуль вместо:

убедитесь в том, что sleep.sh имеет разрешения на выполнение и запускает его с помощью shell=True :

Читайте также:  Delivery to the following recipients failed перевод

Если кто-то ищет вызов скрипта с аргументами

Не забудьте преобразовать args в строку перед передачей, используя str (arg).

Это можно использовать для передачи столько аргументов, сколько требуется