標籤:

0x9:自動化命令

##自動化命令

這一章將會介紹使用python自動執行系統命令,我們將使用python展示兩個執行命令的方式(os,subprocess).

當你開始創建一個腳本的時候,你會發現os.system和subprocess.Popen都是執行系統命令,它們不是一樣的嗎?其實它們兩個根本不一樣,subprocess允許你執行命令直接通過stdout賦值給一個變數,這樣你就可以在結果輸出之前做一些操作,譬如:輸出內容的格式化等.這些東西在你以後的會很有幫助.

Ok,說了這麼多,讓我們來看看代碼:

>>>n>>> import osn>>> os.system(uname -a)nLinux cell 3.11.0-20-generic #35~precise1-Ubuntu SMP Fri May 2 21:32:55 UTC 2014 x86_64 x86_64 x86_64 GNU/Linuxn0n>>> os.system(id)nuid=1000(cell) gid=1000(cell) groups=1000(cell),0(root)n0n>>> os.system(ping -c 1 127.0.0.1)nPING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.n64 bytes from 127.0.0.1: icmp_req=1 ttl=64 time=0.043 msn n--- 127.0.0.1 ping statistics ---n1 packets transmitted, 1 received, 0% packet loss, time 0msnrtt min/avg/max/mdev = 0.043/0.043/0.043/0.000 msn0n>>>n

上面這段代碼並沒有完全的演示完os模塊所有的功能,不過你可以使用"dir(os)"命令來查看其他的函數(譯者注: 如果不會使用可以使用help()命令).

下面我們使用subprocess模塊運行相同的命令:

>>> import subprocessn>>>n>>> com_str = uname -an>>> command = subprocess.Popen([com_str], stdout=subprocess.PIPE, shell=True)n>>> (output, error) = command.communicate()n>>> print outputnLinux cell 3.11.0-20-generic #35~precise1-Ubuntu SMP Fri May 2 21:32:55 UTC 2014 x86_64 x86_64 x86_64 GNU/Linuxn n>>> com_str = idn>>> command = subprocess.Popen([com_str], stdout=subprocess.PIPE, shell=True)n>>> (output, error) = command.communicate()n>>> print outputnuid=1000(cell) gid=1000(cell) groups=1000(cell),0(root)n>>>n

和第一段代碼對比你會發現語法比較複雜,但是你可以把內容存儲到一個變數裡面並且你也可以把返回的內容寫入到一個文件裡面去;

>>> com_str = idn>>> command = subprocess.Popen([com_str], stdout=subprocess.PIPE, shell=True)n>>> (output, error) = command.communicate()n>>> outputnuid=1000(cell) gid=1000(cell) groups=1000(cell),0(root)nn>>> f = open(file.txt, w)n>>> f.write(output)n>>> f.close()n>>> for line in open(file.txt, r):n... print linen...nuid=1000(cell) gid=1000(cell) groups=1000(cell),0(root)n n>>>n

這一章我們講解了如何自動化執行系統命令,記住當你以後遇到 CLI的時候可以把它丟到python腳本裡面;

最後自己嘗試一下寫一個腳本,把輸出的內容寫入到一個文件裡面或者是只輸出部分信息.


推薦閱讀:

使用pyenv管理多個Python版本依賴環境
Python從零開始系列連載(10)——Python的基本運算和表達式(中)
Python爬蟲入門—分析Ajax爬取今日頭條美圖
Python面向對象編程從零開始(4)—— 小姐姐請客下篇
用例3: CVE-2012-3152

TAG:Python教程 |