標籤:

為什麼使用Python

假設我們有這麼一項任務:簡單測試區域網中的電腦是否連通.這些電腦的ip範圍從192.168.0.101到192.168.0.200.

思路:用shell編程.(Linux通常是bash而Windows是批處理腳本).例如,在Windows上用ping ip 的命令依次測試各個機器並得到控制台輸出.由於ping通的時候控制台文本通常是"Reply from ... " 而不通的時候文本是"time out ... " ,所以,在結果中進行字元串查找,即可知道該機器是否連通.

實現:Java代碼如下:

String cmd="cmd.exe ping ";

String ipprefix="192.168.10.";

int begin=101;

int end=200;

Process p=null;

for(int i=begin;i<end;i++){

p= Runtime.getRuntime().exec(cmd+i);

String line = null;

BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));

while((line = reader.readLine()) != null)

{

//Handling line , may logs it.

}

reader.close();

p.destroy();

}

這段代碼運行得很好,問題是為了運行這段代碼,你還需要做一些額外的工作.這些額外的工作包括:

  • 編寫一個類文件
  • 編寫一個main方法
  • 將之編譯成位元組代碼
  • 由於位元組代碼不能直接運行,你需要再寫個小小的bat或者bash腳本來運行.

當然,用C/C++同樣能完成這項工作.但C/C++不是跨平台語言.在這個足夠簡單的例子中也許看不出C/C++和Java實現的區別,但在一些更為複雜的場景,比如要將連通與否的信息記錄到網路資料庫.由於Linux和Windows的網路介面實現方式不同,你不得不寫兩個函數的版本.用Java就沒有這樣的顧慮.

同樣的工作用Python實現如下:

import subprocess

cmd="cmd.exe"

begin=101

end=200

while begin<end:

p=subprocess.Popen(cmd,shell=True,stdout=subprocess.PIPE,

stdin=subprocess.PIPE,

stderr=subprocess.PIPE)

p.stdin.write("ping 192.168.1."+str(begin)+"
")

p.stdin.close()

p.wait()

print "execution result: %s"%p.stdout.read()

對比Java,Python的實現更為簡潔,你編寫的時間更快.你不需要寫main函數,並且這個程序保存之後可以直接運行.另外,和Java一樣,Python也是跨平台的.

有經驗的C/Java程序員可能會爭論說用C/Java寫會比Python寫得快.這個觀點見仁見智.我的想法是當你同時掌握Java和Python之後,你會發現用Python寫這類程序的速度會比Java快上許多.例如操作本地文件時你僅需要一行代碼而不需要Java的許多流包裝類.各種語言有其天然的適合的應用範圍.用Python處理一些簡短程序類似與操作系統的交互編程工作最省時省力.


推薦閱讀:

matplotlib繪圖——柱狀圖
【談談智商稅】我究竟該怎麼學Python
Python數據分析及可視化實例之抽取文本主題(30)
黃哥小議Python pip 包管理工具。

TAG:Python |