2012-03-22 15 views
6

Jedna różnica polega na tym, że "./script.py" działa tylko wtedy, gdy script.py jest wykonywalny (jak w uprawnienia do plików), ale "python script.py" działa niezależnie. Jednak mocno podejrzewam, że jest więcej różnic i chcę wiedzieć, jakie one są.Podczas wywoływania skryptu w języku Python, jaka jest różnica między "./script.py" i "python script.py"

Mam witrynę Django, a "python manage.py syncdb" działa dobrze, ale "./manage.py syncdb" tworzy zepsutą bazę danych z jakiegoś powodu, który pozostaje dla mnie zagadką. Być może ma to związek z tym, że syncdb pyta o nazwę administratora i hasło z wiersza poleceń, i może używając "./manage.py syncdb" zmienia sposób, w jaki komunikuje się z linią komend, a tym samym łamie hasło. Może? Jestem po prostu zaskoczony tym błędem. "python manage.py syncdb" całkowicie to naprawia, więc jest to tylko ciekawostka.

Dzięki.

Edycja: W prawo, w prawo, zapomniałem o konieczności linii shebang #!/Usr/bin/python. Ale po prostu sprawdziłem, "python manage.py syncdb" i "./manage.py syncdb" używają tego samego interpretera Python (2.7.2, jedyny zainstalowany, na Linux Mint 12). Jednak te pierwsze działają, a te drugie nie.

Czy zmienne środowiskowe widziane przez kod Pythona mogą być inne? Mój kod wymaga $ LD_LOADER_PATH i $ PYTHON_PATH do ustawienia dla każdej powłoki.

Odpowiedz

6

Wywołanie ./script.py używa "linii shebang" w skrypcie do określenia, którego interpretera należy użyć do uruchomienia skryptu. Taka linia może wyglądać

#!/usr/bin/env python 

lub

#!/usr/bin/python2.7 

lub cokolwiek ścieżka do interpretera Pythona jest używany. Jeśli to rozwiązuje do tej samej interpreter Pythona, który nazywany jest przez tylko

python 

z linii poleceń powłoki, nie ma różnicy między ./script.py i python script.py, ale dwa wersja może skończyć się przy użyciu różnych tłumaczy Python.

0

./script.py uruchamia interpreter zdefiniowany w #! na początku pliku. Na przykład pierwszy wiersz może być #! /usr/bin/env python lub #! /usr/bin/python lub coś podobnego. Jeśli spojrzysz na to, co wywołuje interpreter, możesz rozwiązać ten problem.

1

./script.py = „Próba wykonania plik o nazwie script.py w bieżącej powłoki”

python script.py = „Wyślij script.py jako argument do pierwszego python wykonywalnego w bieżącym $PATH

Pierwszy działa tylko wtedy, gdy plik ma ustawiony bit wykonania dla użytkownika próbującego wykonać plik i ma on tak zwaną linię shebang, która mówi powłoce, jak ją uruchomić.

0

W systemie Linux za pomocą terminala można wykonać dowolny plik - jeśli użytkownik ma uprawnienie do wykonywania - wpisując: ./fileName. Gdy system operacyjny widzi poprawny nagłówek, taki jak #! /usr/bin/python (lub dla perl #! /usr/bin/python), wywoła on interpretera Pythona lub Perla (odpowiedniego), aby wykonać program.Możesz użyć polecenia python script.py bezpośrednio, ponieważ, python to program wykonywalny znajdujący się pod /usr/bin (lub gdzieś indziej), który jest w zmiennej środowiskowej $ PATH, , która odpowiada katalogowi plików wykonywalnych.

Powiązane problemy