Как я могу запустить мою программу на Python непосредственно из оболочки?

10

Я написал сценарий. Когда он начинается, он не останавливается и продолжает получать данные из Интернета. Я могу назвать это так:

cd /User/Desktop/project/internetScanner/
python3 main.py start

Но я хотел бы позвонить прямо из терминала, например, в пределах пункта назначения:

internetScanner start

Как я могу это сделать?

Тед Вонг
источник
2
Интересно, можно ли изменить название на этом ..
user606723
@ user606723 Не стесняйтесь предложить изменение, чтобы оно изменилось. Первый заголовок "Как разрешить моей программе работать на оболочке?" было не очень хорошо
Slhck

Ответы:

27

Вам, вероятно, следует переименовать ваш файл main.pyв internetScanner. Расширения в * nix не являются обязательными. Это не должно иметь значения здесь.

mv main.py internetScanner

Затем добавьте следующую строку в этот файл, в самом начале:

#!/usr/bin/env python3

Это гарантирует, что когда оболочка выполнит файл, она будет знать, как использовать python3для интерпретации содержимого. Это известно как Шебанг . Теперь сделайте файл исполняемым:

chmod +x internetScanner

Теперь вы можете запустить вашу программу изнутри /User/Desktop/project/internetScanner/:

./internetScanner start

Ваша программа будет работать на переднем плане и продолжаться, пока вы не нажмете Ctrl- C. Если вы не хотите этого, вы также можете запустить программу в фоновом режиме, добавив амперсанд после команды:

./internetScanner start &

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

Если вы теперь хотите иметь возможность запускать программу из любой точки системы, вам нужно добавить internetScannerкаталог в свой каталог PATH: что такое PATH и другие переменные среды, и как я могу их установить или использовать?

slhck
источник
Хороший ответ. Я бы порекомендовал добавить, что он может захотеть завершить команду амперсандом (&), если он не хочет ждать ее и / или перенаправить вывод и поток ошибок в файл.
Бен Хокинг
@BenHocking Спасибо, я добавил это в ответ.
Slhck
X &не отсоединяет процесс от управляющей оболочки, он только загораживает процесс, то есть, если эта оболочка завершает работу, ему отправляется сигнал TERM; так что если вы не хотите , что вы должны использовать отсоединение , detach ./internetScanner start.
Дэн Д.
1
@DanD. ... или nohup, disownили at, и так далее. Как полностью отсоединить процесс от терминала?
slhck
Возможно, стоит отметить, что его можно по-прежнему называть main.pyдо тех пор, пока он имеет символическую ссылку internetScannerгде-то в $ PATH.
JDD
2

Предполагая, что другие файлы /User/Desktop/project/internetScanner/не нужны, если вы хотите установить для одного пользователя, ссылка ( ln -s) main.pyна $HOME/bin/internetScanner. Вы, вероятно, должны $HOME/binсначала MKDIR .

В следующий раз, когда вы войдете, $HOME/binвероятно, будет добавлен в ваш PATH. Если вы хотите, чтобы он был доступен для всех пользователей, скопируйте его в /usr/local/bin.

Если он должен выполняться /User/Desktop/project/internetScanner/, либо начните с импорта osи вызова

os.chdir('/User/Desktop/project/internetScanner/') 

или создать сценарий запуска $HOME/binили /usr/local/binизменить /User/Desktop/project/internetScanner/или выполнить сценарий.

Perkins
источник
0

Поместите alias internetScanner "python /User/Desktop/project/internetScanner/main.py"в файл .aliases (для csh). Для bash поместите alias internetScanner="python /User/Desktop/project/internetScanner/main.py"в .bashrc. После этого вы можете использовать InternetScanner начать с любого места.

Excalibur
источник
Я никогда не слышал о .aliasesфайле. Это что-то стандартное для Bash? или вы должны явно указать его в своем .bashrc?
Казарк