1. 程式人生 > >Python中cmd模組的使用說明

Python中cmd模組的使用說明

    Python中包含一個公共類cmd,它可以用於互動式shell和其它命令直譯器等的基類。預設情況下,它使用readline來進行互動式操作、命令列編輯和命令完成。

使用cmd建立的命令列直譯器迴圈讀取輸入的所有行並且解析它們,然後傳送命令給一個合適的命令處理器。輸入行為解析成兩個部分:命令和引數。如果使用者輸入cmd param,它解釋成命令cmd和引數param,然後使用param作為引數呼叫do_cmd方法。如果do_cmd命令處理器返回真,那麼程式會乾淨的退出,否則會繼續等待下一個命令的輸入。

一個簡單的列印目錄檔案或目錄的例子:

#-*- coding:gbk-*-

import cmd

import os

import sys

classCLI(cmd.Cmd):

    def __init__(self):

        cmd.Cmd.__init__(self)

        self.prompt = "> "    # define command prompt

    def do_dir(self, arg):

        if not arg:

            self.help_dir()

        elif os.path.exists(arg):

            print"\n".join(os.listdir(arg))

        else:

            print "No such pathexists."

    def help_dir(self):

        print "syntax: dir path -- displaya list of files and directories"

    def do_quit(self, arg):

        return True

    def help_quit(self):

        print "syntax: quit -- terminatesthe application"

    # define the shortcuts

    do_q = do_quit

if __name__ =="__main__":

    cli = CLI()

    cli.cmdloop()

         上面的程式碼中self.prompt用於修改命令列的提示符。

說明:在cmd.Cmd派生類中,以do_*開頭為命令,以help_*開頭的為幫助,成員函式的__doc__可以用作為幫助說明。

         可以使用self.intro = “Welcomemessage”來輸出歡迎資訊。

當列印幫助的時候,使用doc_header、misc_header、undoc_header可以用於格式化輸出。

         通過按下TAB可以實現自動完成,多個選項的情況下按下2個TAB鍵可以實現列出所有選項,自動完成的方法新增字首complete_。

defcomplete_dir(self, text, line, begidx, endidx):

        if not text:

            completions = ["aaa","bbb", "ccc"]

        else:

            completions = ["ddd","eee",]

        #print completions

        return completions

注意:自動補全只在Linux下有效。

在cmd中幾種可以過載的方法,可以用於顯示動作或者改變基類的行為。一般而言由於preloop()和postloop()的存在,不需要也沒有必要過載cmdloop()方法。

每次迭代cmdloop()和onecmd()來分發命令給處理器時,實際輸入行為使用parseline()來解析,建立一個元組包含命令和引數。如果改行為空會呼叫emptyline()方法。預設實現執行以前的命令,如果改行包含一個命令,首先呼叫precmd(),然後查詢呼叫處理器的方法,不管有沒有找到命令都會呼叫postcmd()。

為了補充標準命令處理,cmd包含兩個特殊命令的字首,問號(?)相當於內建的幫助命令,感嘆號(!)會對映到do_shell(),以執行其它的命令,感嘆號需要有do_shell方法才會啟用,需要自行新增。

    def do_shell(self, arg):

        "run a shell commad"

        print ">", arg

        sub_cmd = subprocess.Popen(arg,shell=True, stdout=subprocess.PIPE)

        print sub_cmd.communicate()[0]

相關推薦

Pythoncmd模組的使用說明

    Python中包含一個公共類cmd,它可以用於互動式shell和其它命令直譯器等的基類。預設情況下,它使用readline來進行互動式操作、命令列編輯和命令完成。 使用cmd建立的命令列直譯器迴圈讀取輸入的所有行並且解析它們,然後傳送命令給一個合適的命令處理器。輸入

pythonmultiprocessing模組之Pipe管道

原文地址,本文在原文基礎上添加了部分註釋。 multiprocessing.Pipe([duplex]) 方法返回2個連線物件(conn1, conn2),代表管道的兩端,預設duplex為True,是雙向通訊。如果duplex為False,則conn1只能用來接收訊息,conn2只能用來

pythonos模組的作用

簡介 OS模組簡單的來說它是一個Python的系統程式設計的操作模組,可以處理檔案和目錄這些我們日常手動需要做的操作。如果你希望你的程式能夠與平臺無關的話,這個模組是尤為重要的。 常用函式和變數 os.sep可以取代作業系統特定的路徑分隔符。windows下為 “\” os.

PythonMatplotlib模組的簡單使用

目錄 Matplotlib pyplot類 pyplot.plot() 配置屬性 pyplot.subplot() Matplotlib Matplotlib 是 Python 2D 繪圖領域使用最廣泛的套件。它能讓使用者很輕鬆地將資料圖形化,並且提供多樣化的輸出格式

PythonNumpy模組的使用

目錄 NumPy ndarray物件 Numpy資料型別 Numpy陣列屬性 NumPy NumPy(Numerical Python) 是 Python 的一個擴充套件程式庫,支援大量的維度陣列與矩陣運算,此外也針對陣列運算提供大量的數學函式庫。Nupmy可用來儲存和處

Python Wxpy模組以及其監控

概述:   本文主要分享一下博主在學習wxpy 的過程中開發的一個小程式。博主在最近有一個監控報警的需求需要完成,然後剛好在學習wxpy 這個東西,因此很巧妙的將工作和學習聯絡在一起。   博文中主要使用到的技術設計到Python,Redis,以及Java。涉及到的技術看

Pythonlogging模組

1、日誌級別 日誌級別 數值 Critical 50 Error 40 Warning 30 Info 20

Pythonshodan模組的使用

關於shodan的安裝和使用,傳送門——> 滲透測試之Shodan的安裝和使用 常用 Shodan 庫函式 shodan.Shodan(key) :初始化連線API Shodan.count(query, facets=None):返回查詢結果數量

python 歷險記(五)—— python 模組

目錄 前言 基礎 模組化程式設計 模組化有哪些好處? 什麼是 python 中的模組? 引入模組有幾種方式? 模組的查詢順序 模組中包含執行語句的情況 用 dir() 函式來窺探模組 python 的內建模組有哪些? 結語 參考文件

pythonsocket模組詳解

socket模組簡介 網路上的兩個程式通過一個雙向的通訊連線實現資料的交換,這個連線的一端稱為一個socket。socket通常被叫做“套接字”,用於描述IP地址和埠,是一個通訊鏈的控制代碼,可以用來實現不同虛擬機器或不同計算機之間的通訊。在Internet上的主機一般運行了多個服務

pythonconfigparser模組的使用

configparser模組用於生成和修改常見配置文件,當前模組的名稱在 python 3.x 版本中變更為 configparser。 首先要寫一個如下所示的配置檔案: [DEFAULT] serveraliveinterval = 45 compression = yes c

Python json模組基礎功能小結

json支援的資料型別:int, bool, str, list, dict, Null;不支援的資料型別有:set,函式等; json 的優勢,相對其他序列化資料模組,json將資料序列化為字元存入檔案後的內容易讀易懂,且可以和通行很多語言互動資料,給不同語言的程式設計師之間互通資料提供了極大的便利性;

Pythonxlrd模組使用

安裝xlrd 該模組需要自行安裝,直接使用pip安裝就能安裝 簡單使用 測試使用的表格 1、開啟表格檔案並獲取所有sheet名稱 >>> rb = xlrd.open_workbook(r'E:\py-test\tests.xls') >>

Pythoncollections模組的用法

在內建資料型別(dict、list、set、tuple)的基礎上,collections模組提供了幾個額外的資料型別: namedtuple:生成可以使用名字來訪問元素內容的tuple,通常用來增強程式碼的可讀性, 在訪問一些tuple型別的資料時尤其好用. deque

Pythoninspect模組的一些認識

學習python時遇到了inspect模組的使用,不甚瞭解,在此簡要的認識一下。 inspect模組主要提供了四種用處: 對是否是模組,框架,函式等進行型別檢查。 獲取原始碼 獲取類或函式的引數資訊 解析堆疊 這裡我不詳細的敘述這四種用法,噹噹講一

python seaborn 模組畫熱度圖

https://seaborn.pydata.org/generated/seaborn.heatmap.html#seaborn.heatmap   使用seaborn這個模組畫熱度圖,其中mask引數決定了畫那一塊兒。mask矩陣的大小和資料矩陣的大小是一直的,其中0表示fal

Pythonfnmatch模組的使用

fnmatch()函式匹配能力介於簡單的字串方法和強大的正則表示式之間,如果在資料處理操作中只需要簡單的萬用字元就能完成的時候,這通常是一個比較合理的方案。此模組的主要作用是檔名稱的匹配,並且匹配的模式使用的Unix shell風格。原始碼很簡單: """Filename matching with

pythonlxml模組下的xpath用法

安裝  pypi下載地址:https://pypi.python.org/pypi/lxml/3.4.2#downloads pip install lxml XPath 是一門在 XML 文件中查詢資訊的語言。XPath 可用來在 XML 文件中對元素和屬

Pythoncollections模組的使用

本文將詳細講解collections模組中的所有類,和每個類中的方法,從原始碼和效能的角度剖析。 一個模組主要用來幹嘛,有哪些類可以使用,看__init__.py就知道 '''This module implements specialized container datatyp

python os模組操作檔案路徑

python中的os.path模組用法: dirname() 用於去掉檔名,返回目錄所在的路徑 如: >>> import os >>> os.path.dirname('d:\\library\\book.txt') >>>