прямое выполнение скриптов python

Я заметил, что иногда скрипты python запускаются напрямую, то есть /foo/bar.py , а скорее из сценария оболочки, который ничего не делает, кроме /usr/bin/python -O /foo/bar.py $@

Одним из таких примеров является сетевой менеджер wicd . /usr/bin/wicd-gtk – это сценарий оболочки, который запускает wicd-client.py :

 $ cat /usr/bin/wicd-gtk exec /usr/bin/python -O /usr/share/wicd/gtk/wicd-client.py $@ 

Какова цель этого дополнительного шага?

В чем разница, если я сразу запустил /usr/share/wicd/gtk/wicd-client.py (при условии, что он выполним)?

2 Solutions collect form web for “прямое выполнение скриптов python”

Вы не опубликовали полный сценарий – сценарий выполняет другие действия перед запуском wicd-client.py . Сначала он гарантирует, что существует определенный каталог и определенная символическая ссылка:

 # check_firstrun() if [ ! -d "$HOME/.wicd" ]; then mkdir -p "$HOME/.wicd" fi # Make sure the user knows WHEREAREMYFILES ;-) if [ -e "/var/lib/wicd/WHEREAREMYFILES" ] && [ ! -L "$HOME/.wicd/WHEREAREMYFILES" ]; then ln -s "/var/lib/wicd/WHEREAREMYFILES" "$HOME/.wicd/WHEREAREMYFILES" fi 

Затем он запускает Python с опцией -O , что заставляет его оптимизировать байт-код. Я не знаю, насколько это полезно.

Сценарий оболочки также заставляет /usr/bin/python использоваться, тогда как /usr/share/wicd/gtk/wicd-client.py начинается с #!/usr/bin/env python , поэтому он выбирает, какой из python приходит первым в пути поиска команд. В большинстве систем это не будет иметь никакого значения.

Обратите внимание, что в этом скрипте есть ошибка: $@ должен быть "$@" . Сценарий оболочки будет терпеть неудачу, если какой-либо аргумент содержит пробельные или подстановочные символы \[*? ,

Вы можете безопасно запустить /usr/share/wicd/gtk/wicd-client.py вручную, ~/.wicd существует ~/.wicd . Однако пакет Debian не делает его исполняемым; возможно, другие дистрибутивы.

(Чистая спекуляция следует.)

У вас есть пакетная версия Wicd, и поддерживающие пакет тестировали ее с версией Python, упакованной дистрибутивом. Тем не менее, /usr/share/wicd/gtk/wicd-client.py написано с помощью этого shebang:

 #!/usr/bin/env python 

Вполне возможно, что /usr/bin/env выбирает другой python чем /usr/bin/python , особенно если вы программируете на Python. Возможно, упаковщик хотел избежать этого, хотя бы для того, чтобы уменьшить вероятность появления проблем из-за того, что Wicd запускается под другой версией Python или библиотеки, используемые в другой версии.

И они, возможно, хотели выполнять другие подготовительные задания. wicd-gtk на Ubuntu 14.04 имеет это /usr/bin/wicd-gtk :

 #!/bin/sh # check_firstrun() if [ ! -d "$HOME/.wicd" ]; then mkdir -p "$HOME/.wicd" fi # Make sure the user knows WHEREAREMYFILES ;-) if [ -e "/var/lib/wicd/WHEREAREMYFILES" ] && [ ! -L "$HOME/.wicd/WHEREAREMYFILES" ]; then ln -s "/var/lib/wicd/WHEREAREMYFILES" "$HOME/.wicd/WHEREAREMYFILES" fi exec /usr/bin/python -O /usr/share/wicd/gtk/wicd-client.py $@ 
  • «Невозможно записать cd в / home / user» при поиске сценария
  • Как перемещать или копировать список файлов, на которые ссылается файл csv, в новую папку
  • Как я могу сделать исходный-выделить colorize .dotfiles по умолчанию?
  • Мне нужна помощь с командой «at»
  • Использование AWK для удаления результата линии и вывода
  • Пройти через код состояния выхода после использования ||
  • команда status не распознает параметр `-p` в Ubuntu
  • Выход прерывается при добавлении вывода sql-запроса в ksh
  • Различное поведение в сценарии оболочки в оболочке?
  • Linux Mint Corners Музыкальная последовательность Ассоциативный массив
  • Отображает и их относительное положение в сценарии оболочки
  • Interesting Posts

    linux mint: ожидание конфигурации сети

    создание раздела в debian с большим количеством inodes на beaglebone black

    Какой процесс занимает определенный псевдотерминал pts / X?

    Есть ли простой способ подсчета символов в словах в файле, из терминала?

    Удалите текст из файла и сохраните, не открывая

    Как заменить часть имени хоста на xauth (OLD: как перенаправить вывод команды xauth?)

    Какая разница между «терминалом», «оболочкой», «tty» и «консолью»?

    Запуск пользователя виртуальной машины Linux на хосте Linux

    Библиотека для аудиоэффектов и модуляции?

    Где расположены заголовки для скотча и PT-Scotch?

    Куда записывать данные, которые должны сохраняться до следующего запуска приложения?

    Как доказать, что интерпретатор есть / bin / bash при вызове cron

    .DELETE_ON_ERROR поведение с make и конвейерами

    SSH в Windows Server '08 с монетного двора 14 – «разрешение отклонено»

    Невозможно загрузить данные с помощью curl for loop

    Linux и Unix - лучшая ОС в мире.