在Unix之類的作業系統上,如果有安裝的話,Python直譯器通常安裝在 /usr/local/bin/python 這個目錄中。你可能需要先在Shell中設定尋找 /usr/local/bin 目錄,這樣你才可以在Shell中打入以下的指令來啟動Python直譯器
python
你的Python直譯器安裝的位置是可以在安裝時設定的,因此也有可能安裝在其他的地方。你也許需要問你週遭的Python大師或是系統管理員才能知道正確的安裝位置( /usr/local/python 是另外一個普遍的可能安裝所在)。
要離開Python直譯器的話,打入EOF的字元( 在Unix上是 Control-D ,在DOS及Windows上是 Control-Z 就會使得直譯器離開(zero exit status)。如果行不通的話,你可以打入以下指令離開直譯器: "import sys; sys.exit()".
Python直譯器使用每行編輯,應該不難使用。在Unix上,也許安裝Python直譯器的人有安裝使用GNU readline程式庫的功能,這樣的話你會有互動式編輯以及編輯過去資料的功能。最簡單的檢查你有沒有這項功能的方法就是在Python的提示之下打入Control-P
,如果有嗶聲的話,就表示你有這項功能,你可以翻到 附錄 A 去看特殊鍵的用法。如果你沒有聽到嗶聲,或是只出現
P
的話,就表示你沒有這項功能,你得使用倒退鍵(backspace)來清除目前所在行的字元了。
Python直譯器的操作方法根Unix shell很像:當被呼叫時所連結的標準輸入是tty device(終端機)的話,直譯器會互動的讀及執行所輸入的指令。當被呼叫時加入檔案名稱參數或所連結的標準輸入是連到檔案的話,直譯器就會讀入並執行該檔所含有的 script 。
第三種啟動直譯器的方法是打入以下的指令 "python -c command [arg] ..." ,這個指令會執行 command 所代表的敘述(這跟shell的 -c option很像),因為Python敘述(statement)常有空白及特殊字元,所以用此法時可以把 command 所代表的敘述用””括起來,以免跟shell的其他特殊字元或是參數有所混淆。
要注意的是 "python file" 指令跟 "python
<file"指令是有所區分的。對後者而言,不單單只有執行這個script,而且程式中有關輸入的需求(例如呼叫 input()
或是 raw_input()
) 也都會由這個 file 來滿足。由於此file已經在程式執行之初已經被從頭到尾讀過一次,所以一執行這個程式將會馬上就碰到了EOF。相反的對於前一個寫法來說,程式的輸入需求是由任何連結到Python直譯器的標準輸入(standard
input)的裝置或檔案來滿足的,而這個也許才是你所想要的結果。
當script檔案在使用的時候,也許你會想要執行這個script然後還可以之後繼續進入互動的模式。這時你可以加入 -i 這個選項。但是如同前一段所說的,如果此script是由標準輸入來讀進去的話就沒有辦法這樣做了。
如果interpreter認識sys的話(譯:可用“import sys”指令),script的檔案名及附加傳入的參數都會被紀錄在
sys.argv
這個變數並並傳給script來使用。sys.argv
是一列的字串,長度至少為1,如果你什麼都檔案或參數都沒傳的話,
sys.argv[0]
就是一個空字串。如果script的名字是 '-'
(就是標準輸入的意思)的話,
sys.argv[0]
就會被設為 '-'
。當使用
-c command 的話, sys.argv[0]
就被設定為 '-c'
所有的在 -c command 之後的option(例如 –i
)都會被當成 sys.argv
而被command所處理,所以就不是當作option一樣的來看待了。
當指令是由tty終端機來傳入時,我們稱之為互動模式( interactive mode)。在此模式之下會出現主要的命令提示符號(
primary prompt)來提示輸入下一個指令,這個primary prompt通常是 ">
>
> " 。如果是指令是延續上一行的話就會出現secondary prompt符號,這個 secondary
prompt 就通常是 "... " 。一進入python的互動模式的話直譯器會出現一個歡迎信息,以及版本編號輯版權說明,接下來就是第一個prompt。如下所示:
python
Python 1.5.2b2 (#1, Feb 28 1999, 00:02:06) [GCC 2.8.1] on sunos5
Copyright 1991-1995 Stichting Mathematisch Centrum, Amsterdam
>>>
當你輸入需要多行的結構時,直譯器就會自動會出現延續上一行的prompt符號,下面的例子是 if 敘述的情況:
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
... print "Be careful not to fall off!"
...
Be careful not to fall off!
當有錯誤產生時,直譯器就會在螢幕印出錯誤的信息以及stack trace的所有資料。在互動模式之下,印完資料之後會再印出prompt來。如果輸入是來自於檔案的話,在出現錯誤的情況下直譯器在印出stack
trace之後程式會以nonzero exit 的狀態結束。(此處討論不包含已經由 try
敘述及 except
子句處理外的狀況(Exceptions))。有些的程式錯誤是沒有辦法挽救並且會造成nonzero exit的結束情況,這常常是內部的不一致或是某種running
out of memory所造成。所有的錯誤信息都會被寫入至標準error stream之中,正常的程式執行的輸出則會寫入到標準(standard
output)輸出之中。
如果在primary或是secondary prompte之下打入中斷字元(通常是 Control-C 或是 DEL),這會造成輸入的中斷並且會回到prompt之下。
2.1 在指令執行之中打入中斷字元則會引起
KeyboardInterrupt
的exception,而這是可以在 try
敘述中處理的。
在BSD之類的Unix 系統上,我們可以在script的最前面加入以下的敘述(類似shell script),並改變檔案屬性為可執行:
#! /usr/bin/env python
如此script就會變成可執行檔,可以直接執行 (假設Python的直譯器是在user的 $PATH) 變數之中) 。 "#!" 這兩個字必須在script檔案的最前面。值得一提的是 "#" 在Python之中也當作注解(comment)部分開始的符號。
當你使用互動模式的時候,如果可以在每次直譯器要啟動時先執行一些命令的話將是很有用的。要達成如此功能,你可以設定一個檔案名稱給環境變數 $PYTHONSTARTUP ,這個檔案可以包含你想要在啟動時執行的命令,類似 .profile 在Unix shell中的用法。
這個啟動檔(startup file)只有對在互動模式下有效,如果你用Python讀入script時就沒有用,在當
/dev/tty 是命令的輸入來源也沒有用(其他的情況與互動模式相類似)。這個startup file所執行命令的命名空間是與其他互動模式下輸入的指令相同,所以在startup
file內定義或是import的物件,在之後的互動模式指令中都是可以直接使用的。你也可以在這個startup file中改變 sys.ps1
及 sys.ps2
,如此就可以改變你的primary prompt及secondary prompt。
如果你在你的startup file中想要使用另外的在目前目錄的startup file,你只需要在主要startup file (global start-up file)寫入 "if os.path.isfile('.pythonrc.py'): execfile('.pythonrc.py')" 。如果你想要在你的script之中使用startup file的話,你必須在你的script中寫入:
import os
filename = os.environ.get('PYTHONSTARTUP')
if filename and os.path.isfile(filename):
execfile(filename)