python cmd模組 Python的cmd模組

2021-10-11 04:48:20 字數 3591 閱讀 8175

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處理 ...