首先, 創建一個文件, 並給這個文件起一個名字, 該名字就是最後的命令, 例如add. 注意, 這個文件名字不必以py結尾. 然後給這個文件運行許可權, 如下:
然後, 打開剛剛創建的文件, 將下面的代碼寫入頭兩行. 其中第一行說明這個文件由python解釋器來運行, 第二行指定文件的編碼.
之後, 導入標准模塊argparse.
導入模塊之後, 你可以寫任何你想要做的功能, 不過要將功能封裝成模塊, 而不是直接運行, 這是出於良好的編程實踐. 舉個例子:
在文件的最下面, 解析命令行參數, 並調用上面寫好的功能模塊
最後, 保存退出. 在命令行裡面運行這個文件,如下
如何用Python寫Linux命令?
B. python linux怎麼操作
1. os 模塊
1.1. os模塊的exec方法族
Python的exec系統方法同Unix的exec系統調用是一致的。這些方法適用
於在子進程中調用外部程序的情況,因為外部程序會替換當前進程的代碼,不會返回。( 這個看了點 help(os) --> search
"exec" 的相關介紹,但是沒太搞明白咋使用)
1.2. os模塊的system方法
system方法會創建子進程運行外部程序,方法只返回外部程序的運行結果。這個方法比較適用於外部程序沒有輸出結果的情況。
[python]
view plain
>>> import os
>>> os.system("echo \"Hello World\"") # 直接使用os.system調用一個echo命令
Hello World ——————> 列印命令結果
0 ——————> What's this ? 返回值?
>>> val = os.system("ls -al | grep \"log\" ") # 使用val接收返回值
-rw-r--r-- 1 root root 6030829 Dec 31 15:14 log ——————> 此時只列印了命令結果
>>> print val
0 ——————> 注意,此時命令正常運行時,返回值是0
>>> val = os.system("ls -al | grep \"log1\" ")
>>> print val
256 ——————> 使用os.system調用一個沒有返回結果的命令,返回值為256~
>>>
注意:上面說了,此方法脂肪會外部程序的結果,也就是os.system的結果,所以如果你想接收命令的返回值,接著向下看~
1.3. os模塊的popen方法
當需要得到外部程序的輸出結果時,本方法非常有用,返回一個類文件對象,調用該對象的read()或readlines()方法可以讀取輸出內容。比如使用urllib調用Web API時,需要對得到的數據進行處理。os.popen(cmd) 要得到命令的輸出內容,只需再調用下read()或readlines()等 如a=os.popen(cmd).read()
[python]
view plain
>>> os.popen('ls -lt') # 調用os.popen(cmd)並不能得到我們想要的結果
<open file 'ls -lt ', mode 'r' at 0xb7585ee8>
>>> print os.popen('ls -lt').read() # 調用read()方法可以得到命令的結果
total 6064
-rwxr-xr-x 1 long long 23 Jan 5 21:00 hello.sh
-rw-r--r-- 1 long long 147 Jan 5 20:26 Makefile
drwxr-xr-x 3 long long 4096 Jan 2 19:37 test
-rw-r--r-- 1 root root 6030829 Dec 31 15:14 log
drwxr-xr-x 2 long long 4096 Dec 28 09:36 pip_build_long
drwx------ 2 Debian-gdm Debian-gdm 4096 Dec 23 19:08 pulse-gylJ5EL24GU9
drwx------ 2 long long 4096 Jan 1 1970 orbit-long
>>> val = os.popen('ls -lt').read() # 使用變數可以接收命令返回值
>>> if "log" in val: # 我們可以使用in來判斷返回值中有木有一個字元串
... print "Haha,there is the log"
... else:
... print "No,not happy"
...
Haha,there is the log
2. commands 模塊
使用commands模塊的getoutput方法,這種方法同popend的區別在於popen返回的是一個類文件對象,而本方法將外部程序的輸出結果當作字元串返回,很多情況下用起來要更方便些。
主要方法:
* commands.getstatusoutput(cmd) 返回(status, output)
* commands.getoutput(cmd) 只返回輸出結果
* commands.getstatus(file) 返回ls -ld file的執行結果字元串,調用了getoutput,不建議使用此方法
[python]
view plain
long@zhouyl:/tmp/tests$ python
Python 2.7.3 (default, Jan 2 2013, 16:53:07)
[GCC 4.7.2] on linux2
Type "help", "right", "credits" or "license" for more information.
>>> import commands
>>> commands.getstatusoutput('ls -lt') # 返回(status, output)
(0, 'total 5900\n-rwxr-xr-x 1 long long 23 Jan 5 21:34 hello.sh\n-rw-r--r-- 1 long long 147 Jan 5 21:34 Makefile\n-rw-r--r-- 1 long long 6030829 Jan 5 21:34 log')
>>> commands.getoutput('ls -lt') # 返回命令的輸出結果(貌似和Shell命令的輸出格式不同哈~)
'total 5900\n-rwxr-xr-x 1 long long 23 Jan 5 21:34 hello.sh\n-rw-r--r-- 1 long long 147 Jan 5 21:34 Makefile\n-rw-r--r-- 1 long long 6030829 Jan 5 21:34 log'
>>> commands.getstatus('log') # 調用commands.getoutput中的命令對'log'文件進行相同的操作
'-rw-r--r-- 1 long long 6030829 Jan 5 21:34 log'
>>>
3. subprocess模塊
根據Python官方文檔說明,subprocess模塊用於取代上面這些模塊。有一個用Python實現的並行ssh工具—mssh,代碼很簡短,不過很有意思,它在線程中調用subprocess啟動子進程來幹活。
[python]
view plain
>>> from subprocess import call
>>> call(["ls", "-l"])
subprocess與system相比的優勢是它更靈活(你可以得到標准輸出,標准錯誤,「真正」的狀態代碼,更好的錯誤處理,等..)。我認為使用os.system已過時,或即將過時。
C. 怎樣在linux上執行python程序
在linux上執行python程序的方法:1、打開python腳本,在腳本頭部添加【#!/usr/bin/python2.7】;2、執行【chmod +x xxx.py】命令為腳本增加執行許可權;3、執行【./xxx.py】命令即可運行。
方法一:
(推薦教程:Python入門教程)
在文件的頭部(第一行)寫上#!/usr/bin/python2.7,這個地方使用python的絕對路徑,就是上面用which python查詢來的結果。然後在外面就可以使用./xxx.py執行了。
方法二:
直接使用python xxxx.py執行。其中python可以寫成python的絕對路徑。使用which python進行查詢。
D. 如何使用Python3.4與Linux shell交互
在python裡面可以操作linux的命令有
1,os.system("cmd")
2,os.open("cmd")
3,spawn*
4,subprocess
在最新的python里,推薦使用subprocess來與shell通信,它會生成一個子進程來連接輸出,輸入,錯誤等shell下3中標準的輸入輸出流,並返回執行結果的狀態碼0和1,來判斷本次執行命令的成功與失敗。
下面來看一個小例子,首先,確保你的linux環境支持python3.4,如果不支持,你可以參考散仙的上篇文章來安裝python3.4
首先,在linux,執行python命令找到最新的python3.4的路徑,然後再py文件里聲明頭部路徑,如果不知道python的具體安裝路徑,可以使用which python來查找路徑
[root@master ~]# py
pydoc pydoc3.4 python2 python3 python3.4-config python3.4m-config pyvenv
pydoc3 python python2.6 python3.4 python3.4m python3-config pyvenv-3.4
[root@master ~]# which python3.4
/usr/local/python3.4/bin/python3.4
[root@master ~]#
寫完腳本之後,先給腳本賦值許可權,再執行:
[root@master rtt]# chmod +x b.py
[root@master rtt]# cat b.py
#!/usr/local/python3.4/bin/python3.4
import subprocess as t
v=t.call("ls")
print ("返回值: ",v)
[root@master rtt]# b.py
a.py b.py b.txt
返回值: 0
[root@master rtt]#
看下面的例子,注意python的shell執行,返回的是一個字元串,如果我們想逐行解析,需要使用如下方法:
[root@master rtt]# cat b.txt
id name
1 a
2 戰三
3 b
[root@master rtt]# cat a.py
#!/usr/local/python3.4/bin/python3.4
import os
import subprocess as t
#var=t.getoutput("df -h")
#v=t.call("ls")
#var=t.getoutput("cat b.txt | grep a ")
var=t.getoutput("df -h | cat -n ")
for line in var.split("\n"):
print("這一行:" +line)
#print(var)
[root@master rtt]# a.py
這一行: 1 Filesystem Size Used Avail Use% Mounted on
這一行: 2 /dev/sda2 9.7G 2.9G 6.3G 32% /
這一行: 3 tmpfs 495M 0 495M 0% /dev/shm
這一行: 4 /dev/sda1 194M 28M 157M 15% /boot
這一行: 5 /dev/sda3 9.9G 948M 8.5G 10% /home
[root@master rtt]#
最後看下python的兩種,生成行號的方式:
tt="你好\n哈嘍"
for i,it in enumerate(tt.split("\n")):
print(i,it)
for line in range(len(tt.split("\n"))):
print(line," ",tt.split("\n")[line])
輸出結果如下:
0 你好
1 哈嘍
0 你好
1 哈嘍
E. python腳本怎麼執行linux系統命令
打開apache服務其實就一條,就是執行{type httpd}所得到的執行文件。
#!/usr/bin/python
#!coding=<utf-8>
import os
os.system("service httpd start")
#這樣就執行完了,os模塊還有其他可用方法,比如popen(),請參考標准模塊手冊。
F. python 在linux 中執行grep 命令
如果多個內容是與關系,可以多個grep用管道相連,是或關系,可用正則式
如grep
'\(ab|cd\)'
a.txt
是查包含
ab或cd的行,
grep
'ab'
a.txt
|
grep
'cd'
是查包含ab和cd的行
要將結果賦到變數
a=`grep
'\(ab|cd\)'
a.txt
`
就行了
在python里就相當好辦了,用不著grep啦,字元串的find函數就行啦
滿意請採納。
G. python中怎麼調用linux命令
import os
os.system("命令")
H. Python腳本在Linux上怎麼運行
一種方式是用Python命令加Python腳本文件名來運行,如果是運行Python 2.x的Python腳本,可以用python命令(字母P小寫)執行:python 文件名;如果是運行Python 3.x的Python腳本,就用python3命令行執行:python3 文件名。
還有一個直接輸入腳本文件名來運行Python腳本的方式,不過這個Python腳本必須具有可執行許可權(Linux系統中有執行許可權的文件才可以執行,即便是一個二進制文件沒有可執行許可權也是不能運行的),給一個文件添加可執行許可權的命令是:chmod a+x 文件路徑。注意一點:輸入的腳本文件名如果不是一個絕對路徑的文件名,就要先用cd命令切換到腳本所在文件夾,然後以./文件名的方式運行(文件名前面加的是一個英文點號和一個英文斜杠,表示在當前目錄下運行文件),./必須加上。
I. python中,調用linux執行命令的方法中有break,需要用到返回值 繼續自己的程序,結果執
摘要 使用os模塊的system方法:os.system(cmd),其返回值是shell指令運行後返回的狀態碼,int類型,0表示shell指令成功執行,256/512表示未找到,該方法適用於shell命令不需要輸出內容的場景。
J. python和linux到底有關系
python和linux兩者間沒什麼關系,python是一門程序設計語言,linux是一個操作系統,向上支持應用軟體的運行,向下控制硬體,是軟體和硬體的過渡層。Python語言可以在Linux系統下學習和開發。
比如,如果是想用Python開發網站(現今流行的、成熟的Python Web框架)就需要使用到Linux平台;如果想使用Python爬蟲爬取數據,在Linux系統上也要更方便一些;還有就是想學習網路安全滲透測試,在Linux上編寫Python自動化測試腳本也很有必要。
(10)python調用linux系統命令擴展閱讀:
可以通過python對linux進行操作,利用python操縱linux的命令為:
1、import os
#返回操作系統類型,值為posix,是linux操作系統,值為nt,是window操作系統
2、print os.name
#返回操作系統的詳細信息
3、print os.uname()
#系統的環境變數
4、print os.environ
print os.environ.get('PATH')
#判斷是否為絕對路徑(不會判斷文件或者目錄是否存在)
5、print os.path.isabs('/tmp/westos')
print os.path.isabs('hello')
#生成絕對路徑