python腳本編寫(xiě)與執(zhí)行

? ? ? ?Python不使用括號(hào)來(lái)表示代碼的類和函數(shù)定義塊或流程控制。代碼塊是由行縮進(jìn),這是嚴(yán)格執(zhí)行表示方式。在縮進(jìn)位的數(shù)目是可變的,但是在塊中的所有語(yǔ)句必須縮進(jìn)相同的量,在Python中所有的連續(xù)線縮進(jìn)的空格數(shù)同樣的會(huì)結(jié)成塊。

Python中命名規(guī)則


Python?腳本與其它語(yǔ)言的腳本的基本格式完全一樣,本身都是純文字文件,而在文件頭要以#!?指定直譯程序(解釋器)的位置:

[root@importer1~]# whereis python

python: /usr/bin/python2.6 /usr/bin/python/usr/lib/python2.6 /usr/lib64/python2.6 /usr/include/python2.6/usr/share/man/man1/python.1.gz

#可以在腳本首行指定路徑如下

#!/usr/bin/python

習(xí)慣上會(huì)給Python?程序取個(gè)擴(kuò)展名.py?,但Linux?的腳本并不需要綴上擴(kuò)展名,把*.py?改成*?,程序一樣會(huì)正常執(zhí)行。.py?擴(kuò)展名對(duì)Python?仍有特別的意義,但只在撰寫(xiě)Python?模塊的時(shí)候才有用處。

對(duì)于指定Python?解釋器標(biāo)頭,一般還有另外一種寫(xiě)法。

#!/usr/bin/envpython

于是會(huì)以/usr/bin/env?程序去環(huán)境變量中調(diào)用python?解釋器,處理Python?程序檔案。

Windows\linux腳本格式轉(zhuǎn)換

? ? ? windows下編輯的python文件在linux系統(tǒng)上執(zhí)行時(shí),一個(gè)常見(jiàn)錯(cuò)誤是“-bash:

/usr/bin/autocrorder: /usr/bin/python^M: bad interpreter: No such file or

directory”。

這是不同系統(tǒng)編碼格式引起的:在windows系統(tǒng)中編輯的.sh .py文件可能有不可見(jiàn)字符,所以在Linux系統(tǒng)下執(zhí)行會(huì)報(bào)以上異常信息。一般是因?yàn)閣indows行結(jié)尾和linux行結(jié)尾標(biāo)識(shí)不同造成的。有如下解決方法:

在windows下轉(zhuǎn)換,利用一些編輯器如UltraEdit或EditPlus等工具先將腳本編碼轉(zhuǎn)換,再放到Linux中執(zhí)行。轉(zhuǎn)換方式如下(UltraEdit):File-->Conversions-->DOS->UNIX即可。

linux下直接替換,sed -i 's/^M//g'??filename?(注意^M 在linux 下寫(xiě)法按^M 是回車換行符,輸入方法是按住CTRL+v,松開(kāi)v,按m)。

?????? 也可用vi編輯在腳本中轉(zhuǎn)換,首先要確保文件有可執(zhí)行權(quán)限

#>chmod +x filename

#然后修改文件格式

#>vi filename

?

#利用如下命令查看文件格式

#:set ff :setfileformat

#可以看到如下信息

#fileformat=dos fileformat=unix


#利用如下命令修改文件格式

#:set ff=unix????????????????? :set fileformat=unix

#回車、存盤(pán),并退出


? ? ? 在Windows中 '\r'? 回車(Carriage Return),回到當(dāng)前行的行首,而不會(huì)換到下一行, '\n'? 換行(Line Feed),換到當(dāng)前位置的下一行,而不會(huì)回到行首。

? ? ? ? 在計(jì)算機(jī)還沒(méi)有出現(xiàn)之前,有一種叫做電傳打字機(jī)(Teletype Model 33,Linux/Unix下的tty概念也來(lái)自于此)的玩意,每秒鐘可以打10個(gè)字符。但是它有一個(gè)問(wèn)題,就是打完一行換行的時(shí)候,要用去0.2秒,正好可以打兩個(gè)字符。要是在這0.2秒里面,又有新的字符傳過(guò)來(lái),那么這個(gè)字符將丟失。于是,研制人員想了個(gè)辦法解決這個(gè)問(wèn)題,就是在每行后面加兩個(gè)表示結(jié)束的字符。一個(gè)叫做“回車”,告訴打字機(jī)把打印頭定位在左邊界;另一個(gè)叫做“換行”,告訴打字機(jī)把紙向下移一行。這就是“換行”和“回車”的來(lái)歷,從它們的英語(yǔ)名字上也可以看出一二。

后來(lái),計(jì)算機(jī)發(fā)明了,這兩個(gè)概念也就被搬到了計(jì)算機(jī)上。那時(shí),存儲(chǔ)器很貴,一些科學(xué)家認(rèn)為在每行結(jié)尾加兩個(gè)字符太浪費(fèi)了,加一個(gè)就可以。于是就出現(xiàn)了分歧。

Unix系統(tǒng)里,每行結(jié)尾只有“<換行>”,即"\n";Windows系統(tǒng)里面,每行結(jié)尾是“<換行><回 車>”,即“\r\n”;Mac系統(tǒng)里,每行結(jié)尾是“<回車>”,即"\n"。一個(gè)直接后果是,Unix/Mac系統(tǒng)下的文件在 Windows里打開(kāi)的話,所有文字會(huì)變成一行;而Windows里的文件在Unix/Mac下打開(kāi)的話,在每行的結(jié)尾可能會(huì)多出一個(gè)^M符號(hào)。

Python?直譯器還會(huì)讀取另一組格式為# -*- setting

-*-?的標(biāo)頭(?通常接在第一行以后)?,其中常用的是:

# -*- coding: UTF-8 -*-

用途是指定腳本中包含了非ASCII字符?。如果你想要寫(xiě)中文批注,這就非常重要;Python?自己有一套字符編碼轉(zhuǎn)換的機(jī)制,實(shí)作在codecs?模塊里面,但直到Python 2.4?之前,繁體中文常用的Big5?編碼并未進(jìn)入標(biāo)準(zhǔn)的codecs?模塊。如果腳本使用了Python?看不懂的字符編碼(?就是指華文世界用的Big5?和GB)?,程序雖然仍可執(zhí)行,但Python?解釋器會(huì)送出警告。使用上述語(yǔ)句,僅指明腳本中包含了非ASCII字符,而并未將字符編碼轉(zhuǎn)換為utf-8編碼。如果需要將字符編碼改為utf-8,則需要在保存的時(shí)候選擇保存為utf-8格式。

Windows下如果要執(zhí)行.py腳本,在命令行中通過(guò) python *.py這樣的格式運(yùn)行,這種情況需要將.py文件放入python.exe程序所在目錄下。另一種方式是通過(guò)python的IDLE打開(kāi).py文件,然后按F5在python

shell內(nèi)運(yùn)行。

Python腳本語(yǔ)句注釋

? ? ? ?python單行注釋符號(hào)(#),井號(hào)(#)常被用作單行注釋符號(hào),在代碼中使用#時(shí),它右邊的任何數(shù)據(jù)都會(huì)被忽略,當(dāng)做是注釋。在python中也會(huì)有注釋有很多行的時(shí)候,這種情況下就需要批量多行注釋符了。多行注釋是用三引號(hào)’’’ ’’’包含的。

長(zhǎng)字符串的跨行連接

? ? ? ?一個(gè)(對(duì))雙引號(hào)或單引號(hào)一般用于引用寫(xiě)在一行的字符串,如s1="hello,world."。但如果字符串很長(zhǎng),需要寫(xiě)成多行,就用到了續(xù)行符\。

>>> s1="hello,?? \

... world"

>>> s1

'hello,?? world'

>>>?

???? 除最后一行字符串外,后面加上 \ 即可實(shí)現(xiàn)續(xù)行。續(xù)行符(\)多用于一行寫(xiě)不下的情況,\前可以有多個(gè)空格,空格也會(huì)加到原字符串中。續(xù)行字符之后的一行中,縮進(jìn)并不重要。

?????? 要避免空格的出現(xiàn),需要借助于連接符+。但要注意連接符和續(xù)行符之間有空格。

>>> s2="hello,"+ \

???????? " chen ping"

>>> s2

'hello, chen ping'

>>>?

  在此基礎(chǔ)上,如果使用三個(gè)雙引號(hào)的話,連行符就省了,即:

>>>s2=""" hello’s

... world

...haha!"""

>>> s2

'hello’s\nworld\nhaha!'

>>>?

  這種情況下,調(diào)用顯示s1時(shí)為 hello’s\nworld\nhaha,注意其中的換行符\n??梢钥闯?,以上這兩者還是有區(qū)別的,前面的連行符(\)需要顯式寫(xiě)出,但實(shí)際不包含在字符串中的;而使用三個(gè)雙引號(hào)時(shí)換行符(\n)不用顯式寫(xiě)出,但實(shí)際是隱式包含于字符串中的。

? ? ? ?python 三引號(hào)的形式用來(lái)輸入多行文本,也就是說(shuō)在三引號(hào)之間輸入的內(nèi)容將被原樣保留,其中的單號(hào)和雙引號(hào)不用轉(zhuǎn)義,其中的不可見(jiàn)字符比如/n和/t都會(huì)被保留,這樣的好處是你可以替換一些多行的文本。所見(jiàn)即所得,對(duì)于一段html或xml格式的字符串時(shí)用三引號(hào)更直觀點(diǎn)(此時(shí)要用單引號(hào)或雙引號(hào)時(shí)候需要進(jìn)行轉(zhuǎn)義)。

而在PHP當(dāng)中單引號(hào)和雙引號(hào)的有些是不一樣的,雖然表示的字符串,但是在php的單引號(hào)解析速度比雙引號(hào)快,如果在Python用單號(hào)那么在字符串中就可以直接收寫(xiě)雙引號(hào)了,反之亦然。這就是python為什么允許用兩種方式的原因。在實(shí)際應(yīng)用中,python 單引號(hào)和python 雙引號(hào)用得比較多,有兩種表示方式后,就不用老用轉(zhuǎn)義字符了。

此外,還可以把一個(gè)長(zhǎng)字符串寫(xiě)在一個(gè)()中,達(dá)到拆分成多行書(shū)寫(xiě)。如

js_fun2=("function

investfun(investamount){for(i=0;i<10;i++){var "

???????? "invest=document.getElementsByClassName('projectList')[0].getElementsByTagName('a')[i];"

???????? "var

invest_text=invest.querySelector('div.INVESTING').innerText;"

???????? "if(invest_text=='立即投資')"

???????? "{var

invest_remainamount=invest.querySelector('div.INVESTING').nextSibling.innerText;"

???????? "var

remainamount=Number(invest_remainamount.match(/\d+/g)"

???????? ");if(remainamount>investamount){invest.click();break;}}}};investfun("+str(amount)+");")


Python腳本中調(diào)用shell命令和工具

1、os.system(string cmd | scriptname.sh)

? ? ? ?可用于在遠(yuǎn)程類unix上執(zhí)行shell 命令,如在android底層命令行上執(zhí)行。該操作將輸出打印到標(biāo)準(zhǔn)輸出中,這也意味著無(wú)法用變量去接收命令執(zhí)行結(jié)果,只返回腳本退出時(shí)的狀態(tài)碼,如

>>>a=os.system("cat /proc/cpuinfo")

>>>a

0

2、os.popen(cmd)

  要得到命令的輸出內(nèi)容,只需再調(diào)用下read()或readlines()等 。

[NSOS1.1 ~]# python

Python2.4.3 (#1, Dec 10 2010, 17:24:35)

[GCC4.1.2 20080704 (Red Hat 4.1.2-50)] on linux2

Type "help","copyright", "credits" or "license" for moreinformation.

>>> import os

>>> b=os.popen("cat /usr/local/liveupdate/version").readlines();???????????? #按行讀取,返回列表

>>> b

['#Local version information,SHOULD NOT be modified.\n', 'Product_name=Traffic Control\n','Current_Version=5.0\n', 'Last_Patch_SN=1\n', 'DB_Patch_SN=0\n','Last_Build_SN=0\n', 'Last_Hotfix_SN=0\n', 'Type=tc\n']

>>> b[1]

'Product_name=Traffic Control\n'

>>>type(b)

>>>?


給Python腳本傳參數(shù)

? ? ? 如果想對(duì)python腳本傳參數(shù),需要先導(dǎo)入模塊:sys。

腳本調(diào)用方式為

[root@localhosttest]#python downloadximala.py? 參數(shù)1 參數(shù)2 …

? ? ? 則在腳本找那個(gè),可使用變量來(lái)接收這些參數(shù),其中,腳本名為 sys.argv[0],參數(shù)1為sys.argv[1],參數(shù)2為?sys.argv[2],各參數(shù)以空格分割,如果參數(shù)中帶有空格,需要用引號(hào)引用起來(lái)。

如果腳本中引用的參數(shù)超過(guò)了傳參的個(gè)數(shù),將會(huì)報(bào)IndexError: list index out of range錯(cuò)誤。

腳本退出代碼,sys.exit(0)?表示正常退出??,sys.exit(1)表示非正常退出。

Python 交互命令行中執(zhí)行.py文件

? ? ? 只需要3個(gè)步驟,

1.? ? ? ? import?sys

2.? ? ? ? 往系統(tǒng)路徑中加入自己存放py文件的地址

>>>sys.path.append("/newtest")

3.? ? ? ? 然后就可以開(kāi)始通過(guò)import的方法導(dǎo)入,如從test.py文件中加載所有的內(nèi)容

>>>from test import *

? ? ? ? ? 這樣就可以使用test.py中相關(guān)的方法和內(nèi)容了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、Python簡(jiǎn)介和環(huán)境搭建以及pip的安裝 4課時(shí)實(shí)驗(yàn)課主要內(nèi)容 【Python簡(jiǎn)介】: Python 是一個(gè)...
    _小老虎_閱讀 6,335評(píng)論 0 10
  • 官網(wǎng) 中文版本 好的網(wǎng)站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,715評(píng)論 0 5
  • http://python.jobbole.com/85231/ 關(guān)于專業(yè)技能寫(xiě)完項(xiàng)目接著寫(xiě)寫(xiě)一名3年工作經(jīng)驗(yàn)的J...
    燕京博士閱讀 7,804評(píng)論 1 118
  • 在每個(gè)孩子的內(nèi)心深處,都存在一個(gè)宇宙, 它以無(wú)限的廣度和深度而存在著。 孩子的宇宙是美好的,充滿靈性和...
    sunflower80閱讀 2,029評(píng)論 0 0
  • 只有遇見(jiàn)貴人,才有機(jī)會(huì)變成貴人,成為別人的貴人! 足夠幸運(yùn),才遇到我生命中的第一個(gè)貴人,我的研究生導(dǎo)師——沈老師!...
    5ba1f256945d閱讀 569評(píng)論 0 3

友情鏈接更多精彩內(nèi)容