2012-03-22 18 views
6

一個不同之處是,如果script.py是可執行文件,「./script.py」只能(在文件權限),但「python script.py」無論如何工作。但是,我強烈懷疑有更多的差異,我想知道它們是什麼。當調用一個Python腳本,什麼是「./script.py」和‘蟒蛇script.py’之間的區別

我有一個Django的網站,「蟒蛇manage.py執行syncdb」工作得很好,但「./manage.py執行syncdb」由於某種原因仍是一個謎給我創建了一個破碎的數據庫。也許這與事實有關,syncdb會從命令行提示輸入超級用戶名和密碼,也可能使用「./manage.py syncdb」更改它與命令行交互的方式,從而改變密碼。也許?我對這個bug感到困惑。 「python manage.py syncdb」完全修復它,所以這只是好奇心。

謝謝。

編輯:對對對,我忘了家當線#的必要性在/ usr/bin中/蟒蛇!但我剛剛檢查過,「python manage.py syncdb」和「./manage.py syncdb」使用的是相同的Python解釋器(2.7.2,Linux Mint 12上安裝的唯一一個)。然而前者的作品和後者卻沒有。

可以由Python代碼看到的環境變量有什麼不同?我的代碼確實需要爲每個shell設置$ LD_LOADER_PATH和$ PYTHON_PATH。

回答

6

調用./script.py使用在腳本中的「認領線」來確定使用運行腳本解釋器。這樣的行可能看起來像

#!/usr/bin/env python 

#!/usr/bin/python2.7 

或使用任何Python解釋器路徑。如果它解析爲同一個Python解釋器是由剛剛

python 

從shell命令行調用,有./script.pypython script.py沒有什麼區別,但兩個版本可以使用不同的Python解釋告終。

0

./script.py運行在文件開頭的#!定義的解釋。例如,第一行可能是#! /usr/bin/env python#! /usr/bin/python或其他類似的東西。如果你看看被調用的解釋器,你可能可以解決這個問題。

1

./script.py =「嘗試在當前shell執行被稱爲script.py文件」

python script.py =「發送script.py作爲參數傳遞給第一python可執行當前$PATH

首隻工作,如果用戶試圖執行該文件的文件執行位設置有所謂shebang線,它告訴shell如何運行它。

0

在使用終端的Linux中,您可以通過鍵入 ./fileName來執行任何文件(如果用戶具有執行權限)。當操作系統看到有效的頭文件,如#! /usr/bin/python(或perl #! /usr/bin/python)時,它會調用python或perl(適當的)解釋器來執行程序。您可以直接使用命令python script.py,因爲python是位於/usr/bin(或其他位置)的可執行程序,該程序位於與可執行文件的目錄對應的環境變量$ PATH, 中。

相關問題