Як я можу запустити свою програму 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 та інші змінні середовища, і як я можу їх встановити чи використовувати?


Хороша відповідь. Я рекомендую додати, що він може захотіти закінчити команду амперсандом (&), якщо він не хоче його чекати та / або перенаправляти його вихід і потік помилок у файл.
Бен Хокінг

@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/і виконує сценарій.


0

Помістіть alias internetScanner "python /User/Desktop/project/internetScanner/main.py"файл .aliases (для csh). Для баш, покладіть alias internetScanner="python /User/Desktop/project/internetScanner/main.py"в .bashrc. Після цього ви можете використовувати InternetScanner start з будь-якого місця.


Я ніколи не чув про .aliasesфайл. Це щось стандартне для Баша? або вам потрібно явно джерело його у своєму .bashrc?
Казарк
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.