?? node4.html
字號(hào):
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head> <title>2. 使用Python的直譯器</title> <meta name="description" content="2. 使用Python的直譯器 "> <meta name="keywords" content="tut"> <meta name="resource-type" content="document"> <meta name="distribution" content="global"> <link rel="STYLESHEET" href="tut.css"> <link rel="next" href="node5.html"> <link rel="previous" href="node3.html"> <link rel="up" href="tut.html"> <link rel="next" href="node5.html"></head> <body> <div class="navigation"><table align="Center" width="100%" cellpadding="0" cellspacing="2"> <tbody> <tr> <td><a href="node3.html"><img src="../icons/previous.gif" border="0" height="32" alt="Previous Page" width="32"></a></td> <td><a href="tut.html"><img src="../icons/up.gif" border="0" height="32" alt="Up One Level" width="32"></a></td> <td><a href="node5.html"><img src="../icons/next.gif" border="0" height="32" alt="Next Page" width="32"></a></td> <td align="Center" width="100%">Python 教學(xué)文件</td> <td><a href="node2.html"><img src="../icons/contents.gif" border="0" height="32" alt="Contents" width="32"></a></td> <td><img src="../icons/blank.gif" border="0" height="32" alt="" width="32"></td> <td><img src="../icons/blank.gif" border="0" height="32" alt="" width="32"></td> </tr> </tbody></table> <b class="navlabel">Previous:</b> <a class="sectref" href="node3.html">1.開(kāi)胃菜</a> <b class="navlabel">Up:</b> <a class="sectref" href="tut.html">Python教學(xué)文件</a> <b class="navlabel">Next:</b> <a class="sectref" href="node5.html">3. 非正式的Python介紹</a> <br><hr></div> <!--End of Navigation Panel--> <!--Table of Child-Links--> <a name="CHILD_LINKS"><strong>小段落 </strong></a> <ul> <li><a name="tex2html226" href="node4.html#SECTION004100000000000000000">2.1 如何啟動(dòng)直譯器 </a> <ul> <li><a name="tex2html227" href="node4.html#SECTION004110000000000000000">2.1.1 參數(shù)的傳遞 </a> </li> <li><a name="tex2html228" href="node4.html#SECTION004120000000000000000">2.1.2 互動(dòng)模式 </a> </li> </ul> </li> <li><a name="tex2html229" href="node4.html#SECTION004200000000000000000">2.2 直譯器及其周邊環(huán)境 </a> <ul> <li><a name="tex2html230" href="node4.html#SECTION004210000000000000000">2.2.1 程式錯(cuò)誤處理 </a> </li> <li><a name="tex2html231" href="node4.html#SECTION004220000000000000000">2.2.2 執(zhí)行Python腳本(Script) </a> </li> <li><a name="tex2html232" href="node4.html#SECTION004230000000000000000">2.2.3 互動(dòng)式啟動(dòng)檔(startup file) </a> </li> </ul> </li></ul> <!--End of Table of Child-Links--> <hr> <h1> <br> 2. 使用Python的直譯器 </h1> <p> </p><h1> <br> 2.1 如何啟動(dòng)直譯器 </h1> <p> 在Unix之類的作業(yè)系統(tǒng)上,如果有安裝的話,Python直譯器通常安裝在 <span class="file">/usr/local/bin/python</span> 這個(gè)目錄中。你可能需要先在Shell中設(shè)定尋找 <span class="file">/usr/local/bin</span> 目錄,這樣你才可以在Shell中打入以下的指令來(lái)啟動(dòng)Python直譯器 </p><p> </p><dl><dd><pre class="verbatim">python<br></pre> </dd> </dl> <p> 你的Python直譯器安裝的位置是可以在安裝時(shí)設(shè)定的,因此也有可能安裝在其他的地方。你也許需要問(wèn)你周遭的Python大師或是系統(tǒng)管理員才能知道正確的安裝位置( <span class="file">/usr/local/python</span> 是另外一個(gè)普遍的可能安裝所在)。 </p> <p> 要離開(kāi)Python直譯器的話,打入EOF的字元( 在Unix上是 <kbd>Control-D</kbd> ,在DOS及Windows上是 <kbd>Control-Z</kbd> 就會(huì)使得直譯器離開(kāi)(zero exit status)。如果行不通的話,你可以打入以下指令離開(kāi)直譯器: "<tt class="samp">import sys; sys.exit()</tt>". </p> <p> Python直譯器使用每行編輯,應(yīng)該不難使用。在Unix上,也許安裝Python直譯器的人有安裝使用GNU readline程式庫(kù)的功能,這樣的話你會(huì)有互動(dòng)式編輯以及編輯過(guò)去資料的功能。最簡(jiǎn)單的檢查你有沒(méi)有這項(xiàng)功能的方法就是在Python的提示之下打入Control-P,如果有嗶聲的話,就表示你有這項(xiàng)功能,你可以翻到 <a href="node13.html#interacting">附錄 A</a> 去看特殊鍵的用法。如果你沒(méi)有聽(tīng)到嗶聲,或是只出現(xiàn) <code>P</code> 的話,就表示你沒(méi)有這項(xiàng)功能,你得使用倒退鍵(backspace)來(lái)清除目前所在行的字元了。 </p> <p> Python直譯器的操作方法根Unix shell很像:當(dāng)被呼叫時(shí)所連結(jié)的標(biāo)準(zhǔn)輸入是tty device(終端機(jī))的話,直譯器會(huì)互動(dòng)的讀及執(zhí)行所輸入的指令。當(dāng)被呼叫時(shí)加入檔案名稱參數(shù)或所連結(jié)的標(biāo)準(zhǔn)輸入是連到檔案的話,直譯器就會(huì)讀入并執(zhí)行該檔所含有的 <i>script</i> 。 </p> <p> 第三種啟動(dòng)直譯器的方法是打入以下的指令 "<tt class="samp"><b class="program">python</b> <b class="programopt">-c</b> <var>command</var> [arg] ...</tt>" ,這個(gè)指令會(huì)執(zhí)行 <var>command</var> 所代表的敘述(這跟shell的 <b class="programopt">-c</b> option很像),因?yàn)镻ython敘述(statement)常有空白及特殊字元,所以用此法時(shí)可以把 <var>command</var> 所代表的敘述用””括起來(lái),以免跟shell的其他特殊字元或是參數(shù)有所混淆。 </p> <p> 要注意的是 "<tt class="samp">python file</tt>" 指令跟 "<tt class="samp">python<file</tt>"指令是有所區(qū)分的。對(duì)后者而言,不單單只有執(zhí)行這個(gè)script,而且程式中有關(guān)輸入的需求(例如呼叫 <code>input()</code> 或是 <code>raw_input()</code> ) 也都會(huì)由這個(gè) <i>file</i> 來(lái)滿足。由于此file已經(jīng)在程式執(zhí)行之初已經(jīng)被從頭到尾讀過(guò)一次,所以一執(zhí)行這個(gè)程式將會(huì)馬上就碰到了EOF。相反的對(duì)于前一個(gè)寫(xiě)法來(lái)說(shuō),程式的輸入需求是由任何連結(jié)到Python直譯器的標(biāo)準(zhǔn)輸入(standardinput)的裝置或檔案來(lái)滿足的,而這個(gè)也許才是你所想要的結(jié)果。 </p> <p> 當(dāng)script檔案在使用的時(shí)候,也許你會(huì)想要執(zhí)行這個(gè)script然后還可以之后繼續(xù)進(jìn)入互動(dòng)的模式。這時(shí)你可以加入 <b class="programopt">-i</b> 這個(gè)選項(xiàng)。但是如同前一段所說(shuō)的,如果此script是由標(biāo)準(zhǔn)輸入來(lái)讀進(jìn)去的話就沒(méi)有辦法這樣做了。 </p> <p> </p> <h2> <br> 2.1.1 參數(shù)的傳遞 </h2> <p> 如果interpreter認(rèn)識(shí)sys的話(譯:可用“import sys”指令),script的檔案名及附加傳入的參數(shù)都會(huì)被紀(jì)錄在 <code>sys.argv</code> 這個(gè)變數(shù)并并傳給script來(lái)使用。<code>sys.argv</code> 是一列的字串,長(zhǎng)度至少為1,如果你什么都檔案或參數(shù)都沒(méi)傳的話, <code>sys.argv[0]</code> 就是一個(gè)空字串。如果script的名字是 <code>'-'</code> (就是標(biāo)準(zhǔn)輸入的意思)的話, <code>sys.argv[0]</code> 就會(huì)被設(shè)為 <code>'-'</code> 。當(dāng)使用 <b class="programopt">-c</b> <var>command</var> 的話, <code>sys.argv[0]</code> 就被設(shè)定為 <code>'-c'</code> 所有的在 <b class="programopt">-c</b> <var>command</var> 之后的option(例如 –i)都會(huì)被當(dāng)成 <code>sys.argv</code> 而被command所處理,所以就不是當(dāng)作option一樣的來(lái)看待了。 </p> <p> </p> <h2> <br> 2.1.2 互動(dòng)模式 </h2> <p> 當(dāng)指令是由tty終端機(jī)來(lái)傳入時(shí),我們稱之為互動(dòng)模式( <i>interactive mode</i>)。在此模式之下會(huì)出現(xiàn)主要的命令提示符號(hào)(<i>primary prompt</i>)來(lái)提示輸入下一個(gè)指令,這個(gè)primary prompt通常是 "<tt class="samp">><code>></code>> </tt>" 。如果是指令是延續(xù)上一行的話就會(huì)出現(xiàn)secondary prompt符號(hào),這個(gè) <i>secondaryprompt</i> 就通常是 "<tt class="samp">... </tt>" 。一進(jìn)入python的互動(dòng)模式的話直譯器會(huì)出現(xiàn)一個(gè)歡迎信息,以及版本編號(hào)輯版權(quán)說(shuō)明,接下來(lái)就是第一個(gè)prompt。如下所示: </p> <p> </p> <dl> <dd><pre class="verbatim">python<br>Python 1.5.2b2 (#1, Feb 28 1999, 00:02:06) [GCC 2.8.1] on sunos5<br>Copyright 1991-1995 Stichting Mathematisch Centrum, Amsterdam<br>>>><br></pre> </dd> </dl> <p> 當(dāng)你輸入需要多行的結(jié)構(gòu)時(shí),直譯器就會(huì)自動(dòng)會(huì)出現(xiàn)延續(xù)上一行的prompt符號(hào),下面的例子是 <tt class="keyword">if</tt> 敘述的情況: </p> <p> </p> <dl> <dd><pre class="verbatim">>>> the_world_is_flat = 1<br>>>> if the_world_is_flat:<br>... print "Be careful not to fall off!"<br>... <br>Be careful not to fall off!<br></pre> </dd> </dl> <p> </p> <h1> <br> 2.2 直譯器及其周邊環(huán)境 </h1> <p> </p> <h2> <br> 2.2.1 程式錯(cuò)誤處理 </h2> <p> 當(dāng)有錯(cuò)誤產(chǎn)生時(shí),直譯器就會(huì)在螢?zāi)挥〕鲥e(cuò)誤的信息以及stack trace的所有資料。在互動(dòng)模式之下,印完資料之后會(huì)再印出prompt來(lái)。如果輸入是來(lái)自于檔案的話,在出現(xiàn)錯(cuò)誤的情況下直譯器在印出stacktrace之后程式會(huì)以nonzero exit 的狀態(tài)結(jié)束。(此處討論不包含已經(jīng)由 <code>try</code> 敘述及 <code>except</code> 子句處理外的狀況(Exceptions))。有些的程式錯(cuò)誤是沒(méi)有辦法挽救并且會(huì)造成nonzero exit的結(jié)束情況,這常常是內(nèi)部的不一致或是某種runningout of memory所造成。所有的錯(cuò)誤信息都會(huì)被寫(xiě)入至標(biāo)準(zhǔn)error stream之中,正常的程式執(zhí)行的輸出則會(huì)寫(xiě)入到標(biāo)準(zhǔn)(standardoutput)輸出之中。 </p> <p> 如果在primary或是secondary prompte之下打入中斷字元(通常是 Control-C 或是 DEL),這會(huì)造成輸入的中斷并且會(huì)回到prompt之下。 <a name="tex2html1" href="#foot112"><sup>2.1</sup></a> 在指令執(zhí)行之中打入中斷字元?jiǎng)t會(huì)引起 <code>KeyboardInterrupt</code> 的exception,而這是可以在 <code>try</code>敘述中處理的。 </p> <p> </p> <h2> <br> 2.2.2 執(zhí)行Python腳本(script) </h2> <p> 在BSD之類的Unix 系統(tǒng)上,我們可以在script的最前面加入以下的敘述(類似shell script),并改變檔案屬性為可執(zhí)行: </p> <p> </p> <dl> <dd><pre class="verbatim">#! /usr/bin/env python<br></pre> </dd> </dl> <p> 如此script就會(huì)變成可執(zhí)行檔,可以直接執(zhí)行 (假設(shè)Python的直譯器是在user的 <a class="envvar" name="l2h-1">$PATH</a>) 變數(shù)之中) 。 "<tt class="samp">#!</tt>" 這兩個(gè)字必須在script檔案的最前面。值得一提的是"<tt class="character">#</tt>" 在Python之中也當(dāng)作注解(comment)部分開(kāi)始的符號(hào)。 </p> <p> </p> <h2> <br> 2.2.3 互動(dòng)式啟動(dòng)檔(startup file) </h2> <p> 當(dāng)你使用互動(dòng)模式的時(shí)候,如果可以在每次直譯器要啟動(dòng)時(shí)先執(zhí)行一些命令的話將是很有用的。要達(dá)成如此功能,你可以設(shè)定一個(gè)檔案名稱給環(huán)境變數(shù) <a class="envvar" name="l2h-2">$PYTHONSTARTUP</a> ,這個(gè)檔案可以包含你想要在啟動(dòng)時(shí)執(zhí)行的命令,類似 <span class="file">.profile</span> 在Unix shell中的用法。 </p> <p> 這個(gè)啟動(dòng)檔(startup file)只有對(duì)在互動(dòng)模式下有效,如果你用Python讀入script時(shí)就沒(méi)有用,在當(dāng) <span class="file">/dev/tty</span> 是命令的輸入來(lái)源也沒(méi)有用(其他的情況與互動(dòng)模式相類似)。這個(gè)startup file所執(zhí)行命令的命名空間是與其他互動(dòng)模式下輸入的指令相同,所以在startupfile內(nèi)定義或是import的物件,在之后的互動(dòng)模式指令中都是可以直接使用的。你也可以在這個(gè)startup file中改變 <code>sys.ps1</code> 及 <code>sys.ps2</code> ,如此就可以改變你的primary prompt及secondary prompt。 </p> <p> 如果你在你的startup file中想要使用另外的在目前目錄的startup file,你只需要在主要startup file(global start-up file)寫(xiě)入 "<tt class="samp">if os.path.isfile('.pythonrc.py'): execfile('.pythonrc.py')</tt>" 。如果你想要在你的script之中使用startup file的話,你必須在你的script中寫(xiě)入: </p> <p> </p> <dl> <dd><pre class="verbatim">import os<br>filename = os.environ.get('PYTHONSTARTUP')<br>if filename and os.path.isfile(filename):<br> execfile(filename)<br></pre> </dd> </dl> <p> <br> </p> <hr> <h4>注腳</h4> <dl> <dt><a name="foot112">... 回到prompt之下。 </a><a name="foot112" href="node4.html#tex2html1"><sup>2.1</sup></a> </dt> <dd> 有一個(gè)GNU Readline package的問(wèn)題可能會(huì)使這個(gè)功能失效。 </dd> </dl> <div class="navigation"> <table align="Center" width="100%" cellpadding="0" cellspacing="2"> <tbody> <tr> <td><a href="node3.html"><img src="../icons/previous.gif" border="0" height="32" alt="Previous Page" width="32"></a></td> <td><a href="tut.html"><img src="../icons/up.gif" border="0" height="32" alt="Up One Level" width="32"></a></td> <td><a href="node5.html"><img src="../icons/next.gif" border="0" height="32" alt="Next Page" width="32"></a></td> <td align="Center" width="100%">Python 教學(xué)文件</td> <td><a href="node2.html"><img src="../icons/contents.gif" border="0" height="32" alt="Contents" width="32"></a></td> <td><img src="../icons/blank.gif" border="0" height="32" alt="" width="32"></td> <td><img src="../icons/blank.gif" border="0" height="32" alt="" width="32"></td> </tr> </tbody> </table> <b class="navlabel">Previous:</b> <a class="sectref" href="node3.html">1.開(kāi)胃菜</a> <b class="navlabel">Up:</b> <a class="sectref" href="tut.html">Python教學(xué)文件</a> <b class="navlabel">Next:</b> <a class="sectref" href="node5.html">3. 非正式的Python介紹</a> <br> <hr></div> <!--End of Navigation Panel--> <address> </address> <hr>請(qǐng)看<i><a href="about.html">關(guān)于此文件…</a></i> 里面有關(guān)如何給我們建議的說(shuō)明。 </body> </html>
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -