程式扎記: [ The python tutorial ] 2. Using the Python Interpreter

標籤

2011年12月26日 星期一

[ The python tutorial ] 2. Using the Python Interpreter

轉載自 這裡 
2.1 Invoking the Interpreter : 
在開始使用 Python 的指令互動式環境, 必須先 安裝 Python. 並根據你的 OS 將其安裝路徑設置於環境變數中, 讓你在 Console 鍵入 python 就可以使用 Interpreter (直譯器) 進入互動式環境 . 如果你是在 Linux, 你可以如下確認安裝路徑 : 
$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/jdk/bin
$ which python
/usr/bin/python

如果你是 Windows like 的平台, 則可以使用下面命令將你的 Python 安裝路徑(假設是 C:\python32) 加到環境變數 path 中 : 
set path=%path%;C:\python32

如果安裝完 Python 且環境變數也設置完成, 在 Console 鍵入 "python3" 便可以進入指令互動式環境, 如果要退出就使用組合鍵 Control-D on Unix, Control-Z on Windows. 或是直接鍵入 quit() 並按下Enter鍵 也有同樣效果 : 
 

因為這是 Console mode 的 IDE, 所以功能有限, 如果你想回到前一次輸入的內容可以使用 Ctl+P : 
>>> def add(m, n): # Enter
... return m+n #Enter
... # Enter
>>> def add(m, n): # 按下兩次 Ctl+P 則會回到前兩行內容.

如果出現 beep 聲或是互動環境出現 ^p 說明那個版本或是環境下的互動環境不支援這個功能, 更多可以參考 Interactive Input Editing and History Substitution 

如果你在 Console 鍵入 "python3 <檔案路徑>", 則 Python 會將該檔案當作 python 程式碼執行. 如果你不想進入指令互動環境而只是想執行簡單的一行指令, 則可以 : 
python -c command [arg] ...

因為 command 可能會包含 shell 的關鍵字, 所以建議使用 single quote 將 command 包含起來. 

Python 提供許多有用的模組, 你也可以把它們當作 script 來執行 : 
python -m module [arg] ...

- Argument Passing 
通常為了將我們的 script 做的彈性些, 我們會藉由從命令列讀入參數來動態改變原有 script 的設定或行為. 在 Python 中, 由命令列讀入的參數會以 string 的 list 存放在模組 sys 的變數 argv 中, 你可以讀取他們透過在 script 使用語法 "import sys". 這個代表輸入參數的串列長度至少為一, 當你在指令互動環境下沒有輸入任何的 script 或是參數時, sys.argv[0] 為空字串 ; 當你使用 -c 命令列參數, 則 sys.argv[0] 會被設為 '-c' ; 當你使用 -m 命令列參數, 則 sys.argv[0] 會被設為對應引入的模組名稱. 底下為簡單範例 : 
- readArgv.py :
  1. #!/usr/bin/python3  
  2. import sys  
  3.   
  4. index=0  
  5. for arg in sys.argv:  
  6.         print("Arg{0}='{1}'...".format(index,arg))  
  7.         index+=1  

執行結果 : 
$ python readArgv.py arg1 arg2
Arg0='readArgv.py'... #第 0 個參數為 script 名稱.
Arg1='arg1'...
Arg2='arg2'...

- Interactive Mode 
如果直接在 Console 鍵入 "python3" 而沒有任何 script 或是使用 -c/-m 參數時會進入 指令互動環境. 就像 tty 一樣, 你可以在這鍵入命令並且互動環境會將結果顯示在 Console 中. 該互動環境會有 ">>>" 提示字符, 如果你是輸入一個函式, 則在輸入函式內容的提示符會是 "..." 說明依賴於前面的定義 (如函式 etc), 並且最後需要一個空白行說明該定義結束. 底下為簡單範例 : 
 

2.2 The Interpreter and Its Environment 
- Error Handling 
底下為 Python 對 error handling 的說明 : 
When an error occurs, the interpreter prints an error message and a stack trace. In interactive mode, it then returns to the primary prompt; when input came from a file, it exits with a nonzero exit status after printing the stack trace. (Exceptions handled by an except clause in a try statement are not errors in this context.) Some errors are unconditionally fatal and cause an exit with a nonzero exit; this applies to internal inconsistencies and some cases of running out of memory. All error messages are written to the standard error stream; normal output from executed commands is written to standard output.

你可以在指令互動環境下使用 Control-C or DEL 來中止目前的輸入並回到 primary prompt. 而這樣的行為會引發 KeyboardInterrupt exception (可以被 try statement 處理). 

- Executable Python Scripts 
在 BSD’ish Unix 平台如果要讓你的 Python script 可以直接執行, 請在你的 script 的頭部加入下面一行 (根據實際你的安裝目錄路徑) : 
#!/usr/bin/python3
...

在 Python 中使用 "#" 字元來當作註解, 但是 "#!" 為特殊用途, 說明執行時要以哪個執行檔來開啟你的 script. 最後為了讓你的 script 有執行的權限, 你還須使用 chmod 命令如下 (假設你的 script 檔名為 myscript.py) : 
$ chmod +x myscript.py

在 Windows 就沒有這個困擾, 他會將副檔名與對應的執行檔相關起來, 所以只要你的 script 是 .py 結尾, Windows 就會知道它是 Python 的 script 並執行它. 

- Source Code Encoding 
預設 Python 使用 UTF-8 來讀取你的 script, 但是你也可以使用特定編碼. 藉由特殊註解符號如下 : 
# -*- coding: encoding -*-

至於 Python 支援的編碼可以在 Python Library Reference 找到, 底下為使用 Windows-1252 編碼範例 Declaration : 
# -*- coding: cp-1252 -*-

而這個編碼定義必須位於你的 script 的前兩行才會生效. 

- The Interactive Startup File 
當你在使用 Python 指令互訂環境時可能會有常使用或是需要引入的模組, 你希望在開啟互動環境前就能先執行. 這時你可以使用一個環境變數 PYTHONSTARTUP 紀錄你欲執行的 script 的路徑, 這樣每次在開啟指令互動環境前就會先執行該檔案, 並且該檔案的名稱空間就是互動環境的空間, 所以任何在該檔案定義的方法變數, 在指令互動環境都可以使用. (有點類似 Unix shell 的 .profile

底下為官方對該變數使用說明 : 
This file is only read in interactive sessions, not when Python reads commands from a script, and not when /dev/tty is given as the explicit source of commands (which otherwise behaves like an interactive session). It is executed in the same namespace where interactive commands are executed, so that objects that it defines or imports can be used without qualification in the interactive session. You can also change the prompts sys.ps1 and sys.ps2 in this file.

由上可知該變數只使用在 interactive session 中, 如果你希望在你的 script 也能在執行前先執行變數 PYTHONSTARTUP 指定的 start-up script, 則你可以在你的 script 的最前面加入下面代碼 : 
  1. import os  
  2. filename = os.environ.get('PYTHONSTARTUP')  
  3. if filename and os.path.isfile(filename):  
  4.     exec(open(filename).read())  
- The Customization Modules 
Python 提供兩個方法讓你可以客製化載入的 modules, 分別是 sitecustomize 與 usercustomize. 在使用之前我們必須先找到它對應的路徑(底下代碼為找到 usercustomize) : 
>>> import site
>>> site.getusersitepackages()
'/home/john/.local/lib/python3.2/site-packages'

現在你可以建立一個檔案 "usercustomize.py" 到上面指定路徑下, 並在該檔案引入你想引入的模組. 它將會影響每次你呼叫 Python 除非你使用參數 -s 來 disable 這個自動引入. 同樣的 sitecustomize 也是同樣的作法, 但是它通常是由 administrator 進行 global site-packages 的設定使用, 並且它會在 usercustomize 之前先引入. 更多可以參考線上文件有關 site module 的說明. 

補充說明 : 
[Python 學習筆記] 起步走 : 基本環境與互動 (指令互動環境)

沒有留言:

張貼留言

網誌存檔

關於我自己

我的相片
Where there is a will, there is a way!