Jak mogę uruchomić mój program python bezpośrednio z powłoki?

10

Napisałem scenariusz. Kiedy się uruchomi, nie przestanie i nadal pobiera dane z Internetu. Mogę to nazwać w ten sposób:

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

Ale chciałbym to nazwać bezpośrednio z terminala w ten sposób w miejscu docelowym:

internetScanner start

Jak mogę to zrobić?

Ted Wong
źródło
2
Zastanawiam się, czy tytuł można zmienić na tym ..
user606723,
@ user606723 Możesz zaproponować zmianę w celu jej zmiany. Pierwszy tytuł „Jak pozwolić, aby mój program mógł działać na powłoce?” nie było bardzo dobre.
slhck

Odpowiedzi:

27

Prawdopodobnie powinieneś zmienić nazwę pliku main.pyna internetScanner. Rozszerzenia * nix są całkowicie opcjonalne. To nie powinno mieć znaczenia tutaj.

mv main.py internetScanner

Następnie dodaj następujący wiersz do tego pliku, na samym początku:

#!/usr/bin/env python3

Zapewni to, że gdy powłoka wykona plik, będzie wiedział, jak wykorzystać python3interpretację treści. Jest to znane jako Shebang . Teraz uczyń plik wykonywalnym:

chmod +x internetScanner

Możesz teraz uruchomić swój program z poziomu /User/Desktop/project/internetScanner/:

./internetScanner start

Twój program będzie działał na pierwszym planie i będzie kontynuował działanie do momentu naciśnięcia przycisku Ctrl- C. Jeśli nie chcesz tego, możesz również uruchomić program w tle, dodając znak ampersand po poleceniu:

./internetScanner start &

Pozwoli to na uruchomienie programu, ale możesz nadal używać powłoki. To się nazywa kontrolę pracy, a tam prosty poradnik o tym tutaj .

Jeśli chcesz teraz móc uruchomić program z dowolnego miejsca w systemie, musisz dodać internetScannerkatalog do swojego PATH: Czym są PATH i inne zmienne środowiskowe i jak mogę je ustawić lub używać?

slhck
źródło
Dobra odpowiedź. Polecam dodać, że może chcieć zakończyć polecenie znakiem ampersand (&), jeśli nie chce na niego czekać i / lub przekierować strumień wyjściowy i strumień błędów do pliku.
Ben Hocking,
@BenHocking Dzięki, dodałem go do odpowiedzi.
slhck
X &nie odłącza procesu od powłoki kontrolnej, jedynie tworzy proces w tle, co oznacza, że ​​jeśli powłoka wyjdzie, otrzyma sygnał TERM; więc jeśli nie chcemy, że należy użyć odłączenia , detach ./internetScanner start.
Dan D.
1
@DanD. … Lub nohup, disownlub at, i tak dalej. Jak całkowicie odłączyć proces od terminalu?
slhck
Warto zauważyć, że można go nazwać main.pytak długo, jak jest dowiązany symbolicznie do internetScannergdzieś w $ PATH.
jdd
2

Zakładając, że nie /User/Desktop/project/internetScanner/są potrzebne żadne inne pliki , jeśli chcesz zainstalować dla jednego użytkownika, link ( ln -s) main.pydo $HOME/bin/internetScanner. $HOME/binNajpierw prawdopodobnie będziesz musiał uruchomić mkdir .

Przy następnym logowaniu $HOME/binprawdopodobnie zostanie dodany do Twojej ŚCIEŻKI. Jeśli chcesz, aby był dostępny dla wszystkich użytkowników, skopiuj go do /usr/local/bin.

Jeśli trzeba wykonać /User/Desktop/project/internetScanner/, albo zacznij od importowania osi wywoływania

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

lub utwórz skrypt uruchamiający w $HOME/binlub, /usr/local/binktóry zmienia /User/Desktop/project/internetScanner/i wykonuje skrypt.

Perkins
źródło
0

Wstaw alias internetScanner "python /User/Desktop/project/internetScanner/main.py"plik .aliases (dla csh). Aby uzyskać bash, wstaw alias internetScanner="python /User/Desktop/project/internetScanner/main.py".bashrc. Następnie możesz zacząć korzystać z InternetScanner z dowolnego miejsca.

Excalibur
źródło
Nigdy nie słyszałem o .aliasespliku. Czy to coś standardowego dla Bash? czy musisz jawnie go zdobyć w swoim .bashrc?
Kazark