python模塊—command and sys
1.commands模塊
linux系統環境下用於支持shell的一個模塊
1)getoutput()
返回值只有返回結果(字符串類型),沒辦法判斷執行結果是否正常
例子
import commands
cmd = "ls /data/temp"
result1 = commands.getoutput(cmd)
print(type(result1)) # 類型為str
print(result1)
結果:
<type ‘str‘>
2.py
2)getstatusoutout()
返回結果是一個tuple元組,第一個值為接收狀態碼,int類型,0表示正常,非0表示異常;第二個值為字符串,即shell命令執行的結果
例子
import commands
cmd = "ps -ef"
status,result2 = commands.getstatusoutput(cmd)
print(type(status))
print(status)
print(type(result2))
print(result2)
結果:
<type ‘int‘>
0
<type ‘str‘>
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 Oct09 ? 00:00:14 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
root 2 0 0 Oct09 ? 00:00:00 [kthreadd]
2.sys模塊
1)通過sys模塊獲取程序參數
sys.argv[0]:第一個參數,腳本本身
sys.argv[1]:第二個參數,傳入的第一個參數
例子
import sys
print("argv[0]={0} argv[1]={1}".format(sys.argv[0],sys.argv[1]))
結果:
argv[0]=C:/Users/test/PycharmProjects/a/a1.python.py argv[1]=parameter1
2)sys.stdin、sys.stdout、sys.stderr
stdin、stdout、stderr 變量包含與標準I/O流對應的流對象。如果需要更好地控制輸出,而print 不能滿足你的要求,你也可以替換它們,重定向輸出和輸入到其它設備( device ),或者以非標準的方式處理它們
例子1:sys.stdout與print
import sys
sys.stdout.write("hello"+ "\n")
print("hello")
結果:
hello
hello
例子2:sys.stdin與raw_input
import sys
name1 = raw_input("input your name: ")
print(name1)
print ‘stdin_your_name: ‘, # command to stay in the same line
name2 = sys.stdin.readline()[:-1] # -1 to discard the ‘\n‘ in input stream
print(name2)
結果:
input your name: huangzp
huangzp
stdin_your_name: huangzp
huangzp
例子3: 控制臺重定向文件
import sys
f_hander = open("out.log","w")
sys.stdout = f_hander
print("hello")
結果:
本地生成一個out.log文件,內容為hello
3)捕獲sys.exit(n)調用
執行到主程序末尾,解釋器自動退出,但如需中途退出程序,可以調用sys.exit函數,帶有一個可選的整數參數返回給調用它的程序,表示你可以在主程序中捕獲對sys.exit的調用。(0是正常退出,其他為異常)
例子
import sys
def exitfunc():
print "hello world"
sys.exitfunc = exitfunc # 設置捕獲時調用的函數
print "start"
sys.exit(1) # 退出自動調用exitfunc()後,程序退出
print "end" # 不會執行print
結果:
start
hello world
說明:
設置sys.exitfunc函數,及當執行sys.exit(1)的時候,調用exitfunc函數;sys.exit(1)後面的內容就不會執行了,因為程序已經退出
python模塊—command and sys