0x00 關於cmd模組
使用cmd模組建立的命令列直譯器可以迴圈讀取輸入的所有行並且解析它們
0x01 cmd模組的一些常用方法:
cmdloop():類似與tkinter的mainloop,執行cmd解析器
onecmd(str):讀取輸入,並進行處理,通常不需要過載該函式,而是使用更加具體的do_command來執行特定的命名
emptyline():當輸入空行時呼叫該方法
default(line):當無法識別輸入的command時呼叫該方法
completedefault(text,line,begidx,endidx):如果不存在針對的complete_*()方法,那麼會呼叫該函式
precmd(line):命令line解析之前被呼叫該方法
postcmd(stop,line):命令line解析之後被呼叫該方法
preloop():cmdloop()執行之前呼叫該方法
postloop():cmdloop()退出之後呼叫該方法
0x02 用cmd模組簡單實現shell命令
#!/usr/bin/env python
#-*- coding:utf-8 -*-
import sys
import os
import socket
from cmd import cmd
class classshell(cmd):
"""docstring for classshell"""
def __init__(self):
cmd.__init__(self)
os.chdir("c:/users/wyb_9/desktop")
hostname = socket.gethostname()
self.prompt = "reber@" + hostname + " " + os.path.abspath('.') + "\n$ "
def help_dir(self):
print "dir [path]"
def do_dir(self, arg):
if not arg:
print "\n".join(os.listdir('.'))
elif os.path.exists(arg):
print "\n".join(os.listdir(arg))
else:
print "no such path exists"
def help_ls(self):
print "ls [path]"
def do_ls(self, arg):
if not arg:
print "\n".join(os.listdir('.'))
elif os.path.exists(arg):
print "\n".join(os.listdir(arg))
else:
print "no such path exists"
def help_pwd(self):
print "pwd"
def do_pwd(self, arg):
print os.path.abspath('.')
def help_cd(self):
print "cd [path]"
def do_cd(self, arg):
hostname = socket.gethostname()
if not arg:
os.chdir("c:/users/wyb_9/desktop")
self.prompt = "reber@" + hostname + " " + os.path.abspath('.') + "\n$ "
elif os.path.exists(arg):
os.chdir(arg)
self.prompt = "reber@" + hostname + " " + os.path.abspath('.') + "\n$ "
else:
print "no such path"
def help_clear(self):
print "clear"
def do_clear(self, arg):
i = os.system('cls')
def help_cat(self):
print "cat filename"
def do_cat(self, arg):
if os.path.exists(arg):
with open(arg,"r") as f:
data = f.read()
print data
else:
print "no such file exists"
def help_mv(self):
print "mv oldfilename newfilename"
def do_mv(self, arg):
oldfilename,newfilename = arg.split()
if os.path.exists(oldfilename):
os.rename(oldfilename,newfilename)
else:
print "no such file:" + oldfilename
def help_touch(self):
print "touch filename"
def do_touch(self, arg):
with open(arg, "w") as f:
pass
def help_rm(self):
print "rm filepath"
def do_rm(self, arg):
if os.path.exists(arg):
os.remove(arg)
else:
print "no such file:" + arg
def help_cp(self):
print "cp oldfilepath newfilepath"
def do_cp(self, arg):
oldfilepath,newfilepath = arg.split()
if os.path.exists(oldfilepath):
with open(oldfilepath, "r") as f:
data = f.read()
with open(newfilepath, "w") as f:
f.write(data)
else:
print "no such path:" + oldfilepath
def help_exit(self):
print "input exit will exit the program"
def do_exit(self, arg):
print "exit:",arg
sys.exit()
if __name__ == '__main__':
shell = classshell()
shell.cmdloop()
0x03 程式執行結果如下
python cmd 亂碼解決
先看這段 這裡我們先 print type content 可知content是乙個str,str,是乙個位元組陣列,這個位元組陣列表示的是對unicode物件編碼 utf 8 gbk cp936 gb2312等 後的儲存的格式,看好了,這個str是經過 位元組流了,然後在將他encode gbk ...
pymysql 模組快速插入資料庫(python)
先建立database資料庫 建立表字段 再帶入 插入資料 檔名order2.py import random def order1 sql for s in range 1,10 name random.choice 趙錢孫李周吳鄭王 random.choice 紅明嬌瑞睿蕊星三 age rand...
logging模組的4個主要物件 Python
logging模組的4個主要物件分別是logger,filter,formatter,handler.在使用的時候是這樣的 1.首先建立乙個logger,用setlevel設定嚴重程度級別 然後放那兒先 2.然後建立並設定設定filter 如果需要的話 用它來定義那些出錯資訊要交給logger處理 ...