W Linuksie Python może, ale nie musi, wymagać #!
wiersza (shebang). Zależy to od tego, jak obsługiwane są kody w języku Python, uruchamiając je w trybie interaktywnym lub w skrypcie w języku Python.
Tryb interaktywny w języku Python pozwala użytkownikowi pisać i uruchamiać kody w języku Python bezpośrednio, co nie wymaga linii shebang. Aby uruchomić tryb interaktywny, otwórz terminal i wpisz python
Python 2.X lub python3
Python 3.X.
$ python
Python 2.7.6 (default, Jun 22 2015, 18:00:18)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>
$ python3
Python 3.4.3 (default, Oct 14 2015, 20:33:09)
[GCC 4.8.4] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
Skrypt w języku Python pozwala użytkownikowi pisać i zapisywać kody w języku Python w zwykłym pliku tekstowym, a następnie uruchamiać je później. Może to wymagać linii shebang lub nie. Istnieją jednak dwa znane powody, dla których linia shebang jest wymagana do używania skryptu Python w systemie Linux.
uruchamiać kody Pythona w skrypcie wykonywalnym, tj. określa sposób uruchamiania kodów i użycie interpretera;
uruchamiać kody Pythona w odniesieniu do konkretnej wersji Pythona, tj. uruchamiać kody, które są kompatybilne tylko z Python 2.X lub Python 3.X
Ćwicz ze skryptami Python
Poniżej znajduje się lista i zawartość plików, których użyłem, aby pokazać przypadki, że #!
linia (shebang) jest wymagana lub nie jest wymagana.
$ ls -ln *.py
-rw-rw-r-- 1 1000 1000 94 Dec 14 18:37 hello1.py
-rwxrwxr-x 1 1000 1000 116 Dec 14 18:37 hello2e.py
-rw-rw-r-- 1 1000 1000 116 Dec 14 18:37 hello2.py
-rwxrwxr-x 1 1000 1000 117 Dec 14 18:37 hello3e.py
-rwxrwxr-x 1 1000 1000 120 Dec 14 18:37 hello3m.py
-rw-rw-r-- 1 1000 1000 117 Dec 14 18:37 hello3.py
$ file *.py
hello1.py: ASCII text
hello2e.py: Python script, ASCII text executable
hello2.py: Python script, ASCII text executable
hello3e.py: Python script, ASCII text executable
hello3m.py: Python script, UTF-8 Unicode (with BOM) text executable
hello3.py: Python script, ASCII text executable
hello1.py
zawiera tylko kod źródłowy.
import sys
sys.stdout.write("Hello from Python %s\n" % (sys.version,))
print("Hello, World!")
hello2.py
zawiera kod źródłowy i linię shebang.
#!/usr/bin/env python
import sys
sys.stdout.write("Hello from Python %s\n" % (sys.version,))
print("Hello, World!")
hello2e.py
zawiera to samo co hello2.py
i wykonane.
hello3.py
zawiera to samo co hello2.py
, z tym wyjątkiem, że jest przystosowany do działania z Pythonem 3 przez zmianę nazwy pierwszego wiersza na #!/usr/bin/env python3
.
hello3e.py
zawiera to samo co hello3.py
i wykonane.
hello3m.py
zawiera takie same hello3.py
i wykonane jako wykonane, z wyjątkiem tego, że zapisano je z Write Unicode BOM
opcją w edytorze tekstu, tj. podkładką pod mysz.
Poza tym użytkownikowi zostaną przedstawione dwie metody uruchamiania skryptów w języku Python. Obie metody zostały przedstawione poniżej.
Metoda 1: Uruchom z programem Python
Poniżej znajdują się polecenia i dane wyjściowe podczas uruchamiania kodu źródłowego w Pythonie 2 i Pythonie 3.
$ python hello1.py
Hello from Python 2.7.6 (default, Jun 22 2015, 18:00:18)
[GCC 4.8.2]
Hello, World!
$ python3 hello1.py
Hello from Python 3.4.3 (default, Oct 14 2015, 20:33:09)
[GCC 4.8.4]
Hello, World!
Obie wersje Pythona mogły pomyślnie uruchomić skrypt. W związku z tym linia shebang nie jest wymagana podczas uruchamiania skryptu Python za pomocą polecenia python
lub python3
.
Metoda 2: Uruchom jako skrypt w języku Python
Poniżej znajdują się polecenia i dane wyjściowe podczas uruchamiania kodu źródłowego z linią shebang, które nie są dostosowane do żadnego z nich, Python 2 i Python 3, w tym przypadków niewykonywalnych i wykonywalnych.
$ ./hello1.py
bash: ./hello1.py: Permission denied
$ ./hello2.py
bash: ./hello2.py: Permission denied
$ ./hello3.py
bash: ./hello3.py: Permission denied
$ ./hello2e.py
Hello from Python 2.7.6 (default, Jun 22 2015, 18:00:18)
[GCC 4.8.2]
Hello, World!
$ ./hello3e.py
Hello from Python 3.4.3 (default, Oct 14 2015, 20:33:09)
[GCC 4.8.4]
Hello, World!
Pierwsze trzy skrypty zakończyły się niepowodzeniem, ponieważ skrypty te nie są wykonywane, niezależnie od tego, czy mają linię shebang, czy nie (Aby uzyskać dowód, patrz Dodatkowy przykład poniżej). Ostatnie dwa skrypty mają linię shebang i są wykonywalne.
Najwyraźniej skrypt, który został wykonany jako wykonywalny, jest w zasadzie bezużyteczny bez linii shebang. Dlatego wymagana jest linia shebang, a skrypt musi być wykonywalny podczas uruchamiania kodów Python w skrypcie wykonywalnym.
Gdy shebang nie działa
W moim przygotowanym i przetestowanym przykładzie działanie hello3m.py
jako skrypt wykonywalny nie powiodło się i zwróciło błąd.
$ ./hello3m.py
./hello3m.py: line 1: #!/usr/bin/env: No such file or directory
Jest to znane ograniczenie, że shebang nie działa lub staje się nieważny. Kiedy plik zostanie zapisany jako Unicode BOM (Byte Order Mark), nie będzie działał normalnie jako wykonywalny skrypt Pythona.
Dodatkowy przykład
Ten dodatkowy przykład należy traktować wyłącznie jako dowód uzupełniający. Użytkownik powinien unikać uruchamiania tego przykładu, chociaż wynik jest nieszkodliwy.
Utworzyłem inny plik o nazwie hello1e.py
, który zawiera ten sam hello1.py
plik i jest wykonywalny. Uruchomienie tego skryptu zwróciło błąd składniowy.
$ ./hello1e.py
./hello1e.py: line 2: syntax error near unexpected token `"Hello from Python %s\n"'
./hello1e.py: line 2: `sys.stdout.write("Hello from Python %s\n" % (sys.version,))'
Podczas uruchamiania tego skryptu kursor myszy zostanie na początku zmieniony na znak plus i nic nie robi. Błąd składniowy nie będzie wyświetlany, dopóki nie kliknę okna Desktop lub Terminal. Następnie ten skrypt utworzy sys
plik w tym samym katalogu co skrypt.
$ file sys
sys: PostScript document text conforming DSC level 3.0, Level 1
sys
Plik został zidentyfikowany jako plik PostScript, bez rozszerzenia pliku. Ten plik można otworzyć w przeglądarce dokumentów, tj. Evince, a plik faktycznie zawiera zrzut ekranu okna, które kliknąłem wcześniej. Z mojego doświadczenia wynika, że plik może mieć wielkość kilku megabajtów.
Ponownie wymagana jest linia shebang, a skrypt musi być wykonywalny podczas uruchamiania skryptu Python jako skryptu wykonywalnego. W przeciwnym razie skrypt będzie źle działał, jak opisano powyżej.
Dodatkowe uwagi
Termin „wykonywalny” lub „musi być wykonywalny” odnosi się do pozwolenia na uruchomienie skryptu. Odbywa się to poprzez uruchomienie chmod +x FILENAME
polecenia w Terminalu lub zaznaczenie opcji „Zezwól na uruchamianie tego pliku jako programu” lub czegoś podobnego w oknie Właściwości w menedżerze plików.
Podczas gdy inne istniejące odpowiedzi obejmowały prawie wszystko, ta odpowiedź przyjęła inne podejście, wykorzystując praktyczne przykłady w celu wyjaśnienia sprawy. Składnia kodu została napisana z ostrożnością, tak aby przykłady mogły być uruchamiane w Pythonie 2 lub Pythonie 3, tak jak jest.
Kody Pythona zostały zaadaptowane z używania Pythona w systemie Windows i używania Pythona na platformach Unix , z dodatkowym jednuliniowym kodem wszechobecnego „Hello, World!” program.
Wszystkie kody i polecenia zostały w pełni przetestowane i działają w systemie Xubuntu 14.04, w którym domyślnie zainstalowano Python 2.7 i Python 3.4.
.
), aby określić, jaki to plik. Nawet Windows odchodzi od tego: sprawdź kilka pierwszych wierszy pliku Microsoft Word, a stwierdzi, że w rzeczywistości jest to plik Microsoft Word.