欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

Python學習之旅:使用Python實現Linux中的ls命令

系統 1697 0

一、寫在前面

  前幾天在微信上看到這樣一篇文章,鏈接為:https://mp.weixin.qq.com/s/rl6Sgv3uk_IpoFAx6cWa8w,在這篇文章中,有這樣一段話,吸引了我的注意:

Python學習之旅:使用Python實現Linux中的ls命令_第1張圖片

?  在 Linux 中 ls 是一個使用頻率非常高的命令了,可選的參數也有很多, 算是一條不得不掌握的命令。Python 作為一門簡單易學的語言,被很多人認為是不需要認真學的,或者只是隨便調個庫就行了,那可就真是小瞧 Python 了。那這次我就要試著用 Python 來實現一下 Linux 中的 ls 命令, 小小地證明下 Python 的不簡單!

?

二、ls簡介

  Linux ls 命令用于顯示指定工作目錄下的內容。語法如下:

ls [-alkrt] [name]

  這里只列舉了幾個常用的參數,ls 命令的可選參數還是很多的,可以使用 man ls 來進行查看具體信息。這里列出的幾個參數對應含義如下:

  1)-a:顯示所有文件及目錄;

  2)-l:除文件名稱外,亦將文件大小、創建時間等信息列出;

  3)-k:將文件大小以 KB 形式表示;

  4)-r:將文件以相反次序排列;

  5)-t:將文件以修改時間次序排列。

?

三、具體思路

  主要使用的模塊是 argparse 和 os,其中 argparse 模塊能設置和接收命令行參數,也就使得 Python 對命令行的操作變得簡單,而 os 模塊則用于文件操作,對 argparse 模塊不熟悉的可以在這里查看官方文檔。

  既然要用 Python 實現 ls.py, 也就要在命令行中進行操作,比如 python ls.py -a 這樣的命令,而對 Python 比較熟悉的人可能會想到使用 sys 模塊來接收輸入的命令,但使用 argparse 能讓命令行操作變得更加簡單!首先要導入模塊并創建一個 ArgumentParser 對象,可以理解為一個解析器,然后就可以通過使用 add_argument() 方法為這個解析器添加參數了。示例如下:

            
               1
            
            
              #
            
            
               test.py
            
            
               2
            
            
              import
            
            
               argparse

            
            
               3
            
            
               4
            
             parser = argparse.ArgumentParser(description=
            
              '
            
            
              Find the maximum number.
            
            
              '
            
            
              )

            
            
               5
            
             parser.add_argument(
            
              "
            
            
              integers
            
            
              "
            
            , type=int, nargs=
            
              "
            
            
              +
            
            
              "
            
            , help=
            
              "
            
            
              The input integers.
            
            
              "
            
            
              )

            
            
               6
            
             parser.add_argument(
            
              "
            
            
              -min
            
            
              "
            
            , nargs=
            
              "
            
            
              ?
            
            
              "
            
            , required=False, dest=
            
              "
            
            
              find_num
            
            
              "
            
            , default=max, const=
            
              min, 

            
            
               7
            
                                 help=
            
              "
            
            
              Find the minimum number(Default: find the maximum number).
            
            
              "
            
            
              )

            
            
               8
            
            
               9
            
            
              10
            
             args =
            
               parser.parse_args()

            
            
              11
            
            
              print
            
            
              (args)

            
            
              12
            
            
              print
            
            (args.find_num(args.Nums))
          

  這段代碼的功能是輸入一到多個整數,默認求其中的最大值,若有 -min 參數則是求其中的最小值。可以看到在創建解析器和添加命令行參數的時候都設置了 description 描述信息,這個信息會在我們使用 --help 命令的時候顯示出來,例如:

Python學習之旅:使用Python實現Linux中的ls命令_第2張圖片

  在上面的代碼中,需要注意的是其中使用 add_argument() 添加了一個位置參數 "integers" 和一個可選參數 "-min",位置參數在命令行中必須存在,不可遺漏,也就不能設置 required 參數了,而可選參數就不是必須要有的了,因而還可以使用 default 參數設置默認值。nargs 參數用于設置命令行參數的數量,"+" 表示一個或多個,"?" 表示零個或一個,這里由于輸入的數字可能有多個,所以要設置為 "+"。最終運行示例如下:

> python test.py 1 3 5

Namespace(find_num= , integers=[1, 3, 5])
5

>?python test.py 1 3 5 -min

Namespace(find_num= , integers=[1, 3, 5])

1

  關于 argparse 的介紹就到此為止了,下面簡單介紹下 os 模塊, os 模塊提供了便捷的使用操作系統相關功能的方式,實現 ls.py 所用到的該模塊下的方法包括:

  1)os.path.isdir(path):若 path 是一個存在的目錄,返回 True。

  2)os.listdir(path):返回一個列表,其中包括 path 對應的目錄下的內容,不包含“.”和“..”,即使它們存在。

  3)os.stat(path):獲取文件或文件描述符的狀態,返回一個 stat_result 對象,其中包含了各種狀態信息。

?

四、主要代碼

?  ls.py 中的主函數如下,主要功能為創建解析器,設置可選參數和位置參數,然后接收命令行參數信息,并根據輸入的參數調用相應的方法,這里設置了一個 "-V" 參數用于顯示版本信息,可以使用 "-V" 或者 "-Version" 進行查看。

            
               1
            
            
              def
            
            
               main():

            
            
               2
            
            
              """
            
            
               3
            
            
                  主函數,設置和接收命令行參數,并根據參數調用相應方法

            
            
               4
            
            
                  :return:

            
            
               5
            
            
              """
            
            
               6
            
            
              #
            
            
               創建解析器
            
            
               7
            
                 parse = argparse.ArgumentParser(description=
            
              "
            
            
              Python_ls
            
            
              "
            
            
              )

            
            
               8
            
            
              #
            
            
               可選參數
            
            
               9
            
                 parse.add_argument(
            
              "
            
            
              -a
            
            
              "
            
            , 
            
              "
            
            
              -all
            
            
              "
            
            , help=
            
              "
            
            
              Show all files
            
            
              "
            
            , action=
            
              "
            
            
              store_true
            
            
              "
            
            , required=
            
              False)

            
            
              10
            
                 parse.add_argument(
            
              "
            
            
              -l
            
            
              "
            
            , 
            
              "
            
            
              -long
            
            
              "
            
            , help=
            
              "
            
            
              View in long format
            
            
              "
            
            , action=
            
              "
            
            
              store_true
            
            
              "
            
            , required=
            
              False)

            
            
              11
            
                 parse.add_argument(
            
              "
            
            
              -k
            
            
              "
            
            , help=
            
              "
            
            
              Expressed in bytes
            
            
              "
            
            , action=
            
              "
            
            
              store_true
            
            
              "
            
            , required=
            
              False)

            
            
              12
            
                 parse.add_argument(
            
              "
            
            
              -r
            
            
              "
            
            , 
            
              "
            
            
              -reverse
            
            
              "
            
            , help=
            
              "
            
            
              In reverse order
            
            
              "
            
            , action=
            
              "
            
            
              store_true
            
            
              "
            
            , required=
            
              False)

            
            
              13
            
                 parse.add_argument(
            
              "
            
            
              -t
            
            
              "
            
            , help=
            
              "
            
            
              Sort by modified time
            
            
              "
            
            , action=
            
              "
            
            
              store_true
            
            
              "
            
            , required=
            
              False)

            
            
              14
            
                 parse.add_argument(
            
              "
            
            
              -V
            
            
              "
            
            , 
            
              "
            
            
              -Version
            
            
              "
            
            , help=
            
              "
            
            
              Get the version
            
            
              "
            
            , action=
            
              "
            
            
              store_true
            
            
              "
            
            , required=
            
              False)

            
            
              15
            
            
              #
            
            
               位置參數
            
            
              16
            
                 parse.add_argument(
            
              "
            
            
              path
            
            
              "
            
            , type=str, help=
            
              "
            
            
              The path
            
            
              "
            
            , nargs=
            
              "
            
            
              ?
            
            
              "
            
            
              )

            
            
              17
            
            
              18
            
            
              #
            
            
               命令行參數信息
            
            
              19
            
                 data =
            
               vars(parse.parse_args())

            
            
              20
            
            
              assert
            
             type(data) ==
            
               dict

            
            
              21
            
            
              if
            
             data[
            
              "
            
            
              V
            
            
              "
            
            
              ]:

            
            
              22
            
            
              print
            
            (
            
              "
            
            
              Python_ls version: 1.0
            
            
              "
            
            
              )

            
            
              23
            
            
              return
            
            
              24
            
            
              else
            
            
              :

            
            
              25
            
                     check_arg(data)
          

?  然后是一個獲取指定路徑下的內容信息的函數,要做的就是判斷路徑是否存在,若存在就返回一個文件列表,若不存在則顯示錯誤信息,并退出程序。

            
               1
            
            
              def
            
            
               get_all(path):

            
            
               2
            
            
              """
            
            
               3
            
            
                  獲取指定路徑下的全部內容

            
            
               4
            
            
                  :param path: 路徑

            
            
               5
            
            
                  :return:

            
            
               6
            
            
              """
            
            
               7
            
            
              if
            
            
               os.path.isdir(path):

            
            
               8
            
                     files = [
            
              "
            
            
              .
            
            
              "
            
            , 
            
              "
            
            
              ..
            
            
              "
            
            ] +
            
               os.listdir(path)

            
            
               9
            
            
              return
            
            
               files

            
            
              10
            
            
              else
            
            
              :

            
            
              11
            
            
              print
            
            (
            
              "
            
            
              No such file or directory
            
            
              "
            
            
              )

            
            
              12
            
                     exit()
          

?

五、運行結果

  下面是 ls.py 運行后的部分結果截圖。

  首先是 python ls.py -a,這里并沒有輸入路徑,就會使用默認路徑即當前目錄,如下圖:

Python學習之旅:使用Python實現Linux中的ls命令_第3張圖片

  然后是 python ls.py -a -t .,使用該命令會顯示當前目錄下的所有內容,并按照創建的時間進行排序,如下圖:

Python學習之旅:使用Python實現Linux中的ls命令_第4張圖片

  最后是 python ls.py -a -l -k -r .,也是顯示當前目錄下的所有內容并按照創建名稱排序,不過這次文件大小會以 KB 為單位來顯示,如下圖:

Python學習之旅:使用Python實現Linux中的ls命令_第5張圖片

?  到這里為止,ls.py 就算是基本實現了,當然還是有很多可以去實現的功能的,比如更多的參數等等,如果你感興趣的話可以自己嘗試一下==

?

完整代碼已上傳到GitHub!


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 香港三级日本三级韩国三级韩 | 亚洲精品一区二区三区四区高清 | 午夜成人免费视频 | 日韩中文字幕一区二区三区 | 亚洲精品久久久久一区二区三 | 亚洲fuli在线观看 | 国产成人综合95精品视频免费 | 一区二区三区四区视频 | 亚洲综合无码一区二区 | 国内精品一区二区 | 9277在线观看视频 | 新白娘子传奇50集免费赵雅芝版 | 亚洲视频免费在线 | 日韩高清中文字幕 | 四虎永久 | 久草新| 人人香蕉 | 中国女人内谢69xxxx天美 | 天堂亚洲网 | 男女激情视频在线观看 | 97超级碰碰碰在线播放 | 国产免费一区二区三区免费视频 | 偷拍自拍视频在线观看 | 亚洲视频不卡 | 中文视频在线 | 看a级毛片| 欧美成人免费看片一区 | 国产一区二区在线免费观看 | 国产专区在线视频 | 波多野一区二区三区在线 | 国产成人黄网在线免 | 黄色入口网站 | 国产成人精品久久二区二区91 | 国产精品免费一区二区三区 | 亚洲国产精品热久久 | 日韩一区二区不卡 | 91青青青青青爽在线 | 孕妇体内谢精满日本电影 | 国产精品久久久久久吹潮 | 国产在线视频2019最新视频 | 一区二区在线 |