看过这篇《2000字谏言,给那些想学Python的人,建议收藏后细看!》的读者应该都对一个命令有点印象吧?没错,就是 linux 中经常会用到的 ls 命令。

文章中我就提到如何提升自己的 python 能力呢?直接找项目写,但是作为零基础 / 小白 / 入门 的你来说做一个博客还要学 web 框架、html、css、js,又成为了阻碍你写实际项目的阻碍。

所以我就推荐了这个命令:ls。写一个 ls 非常简单,你只需要会一点 linux 的基础知识,知道 ls 能做什么就好了。

那今天就给大家码了一个哪哪能用的 ls.py ,没错,windows 也可以哦~

演示环境

  • 操作系统:windows10
  • python版本:python 3.7
  • idea:pycharm 2018.2
  • 使用模块:argparse, os

了解argparse模块

argparse是python的标准库,他可以使我们很友好的编写命令行界面,并且可以自动生成帮助文档和使用消息,还能在参数无效的时候发出错误。

argparse.ArgumentParse类参数理解

  1. prog:改变应用的名字,我们可以使用%(prog)s引用应用的名字,默认的应用名字为文件名。
  2. usage: 显示这个命令用法, 一般用来显示参数的用法
  3. description:显示这个命令的帮助信息
  4. epilog: 显示命令的帮助信息,位置在参数的下面

argparse.ArgumentParser.add_argument函数理解

  1. name | flags: 指定参数的名字
  2. action: 指定命令行参数,内置为以下几种
    • store: 默认值,仅仅保存参数值。
    • store_const: 与store基本一致,但是只保存const关键字指定的值,其它的值会报错
    • store_true | store_false: 与store_const基本一致,只保存True和False
    • append: 将相同参数的不同值保存在一个list中
    • count: 统计参数出现的次数
    • help: 输出程序的帮助信息
    • version: 输出程序版本信息
  3. nargs: 将不同数量的值与一个参数关联起来
    • nargs=N:N为整数
    • nargs='?'
    • nargs='*': 将所有的参数保存在列表中
    • nargs='+': 将所有的参数保存在列表中,但是至少得有一个参数
    • nargs=argparse.REMAINDER: 其余的参数全部保存在一个list中
  4. default: 如果没有传入这个参数,默认使用default参数的值
  5. type: 接收到的参数会经过这个参数对应的函数处理。
  6. choices: 将参数指定在一个范围内,超出就报错
  7. required: 指定参数是否为必传参数。
  8. dest: 自定义参数的名称,默认名称为 “- 后面的值” 或者 “-- 后面的值”。

编写ls命令脚本

这里我们就简单的指定三个参数.

  • -a: 添加 -a 参数,显示隐藏文件。
  • -r: 添加 -r 参数,递归显示文件夹下面的文件。
  • -d: 指定显示目录,如果不指定,默认为当前目录。

首先我们使用 ArgumentParser 类来指定参数。

import os
import argparse parser = argparse.ArgumentParser(prog='ls', description='显示文件夹下的文件') # 指定参数
parser.add_argument('-a', '--all', const=True, nargs='?', help='是否显示隐藏文件')
parser.add_argument('-d', '--directory', help='指定显示的目录,如果不指定,默认为当前目录')
parser.add_argument('-r', '--recursion', const=True, nargs='?', help='是否递归显示') # 解析参数
args = parser.parse_args() # 拿到directory参数,如果没有传这个参数,为None
directory = args.directory
# 如果directory有值
if directory:
# 如果指定目录不存在,抛出异常
if not os.path.exists(directory):
raise ValueError(f'{directory} does`t exist') # 如果directory不是一个目录,抛出异常
if not os.path.isdir(directory):
raise ValueError(f'{directory} is not a directory') # 如果directory为None,给directory赋值
else:
directory = '.'

我们规定好参数之后,接下来就是具体ls的实现。我们封装一个 LsCommand 类

class LsCommand():
def __init__(self, show_all=False, directory='.', recursion=False):
'''
:param show_all: 是否显示隐藏文件
:param directory: 指定的文件目录
:param recursion: 是否递归显示目录下的文件
'''
self.show_all = show_all
self.recursion = recursion
self.directory = os.path.abspath(directory) def handle_dir(self, directory, grade=1, placeholder='--'):
'''
处理目录
:param directory: 文件目录
:param grade: 目录层级
:param placeholder: 子目录文件前面的占位符
:return:
'''
# 判断是否为文件夹 # grade是否增加过了 # os.listdir: 列出当前文件夹下面的所有文件和文件夹
# 遍历目录下的文件,文件夹
pass def show_file_or_dir(self, file, prefix=''):
# 如果不显示隐藏文件 # 打印前缀和文件名
pass def run(self):
'''
运行ls命令
:return:
'''
# os.listdir(dir) 得到dir目录下所有文件,文件夹 # 遍历self.directory目录先所有文件,文件夹 pass

ls这个类我们也封装好了,接下来我们将得到的参数传入 LsCommand 类中,然后运行,就可以愉快的得出结果。

ls = LsCommand(bool(args.all), directory, bool(args.recursion))
ls.run()

效果展示:

python ls.py

python ls.py -a

python ls.py -a -r

python ls.py -d ./temp

关注公众号「Python专栏」,后台回复「机器学习电子书」免费获取100本机器学习电子书

会用python把linux命令写一遍的人,进大厂有多容易?的更多相关文章

  1. Python实现Linux命令xxd -i功能

    目录 Python实现Linux命令xxd -i功能 声明 一. Linux xxd -i功能 二. xxd -i常见用途 三. 类xxd -i功能的Python实现 Python实现Linux命令x ...

  2. python执行linux命令的两种方法

    python执行linux命令有两种方法: 在此以Linux常用的ls命令为例: 方法一:使用os模块 1 2 3 shell# python >> import os >> ...

  3. 两本最近阅读的工具书的记录 关于Python和Linux命令行的 不喜勿喷 只是写给自己用

    <Linux命令行完全技术宝典>读书心得 张栋作者 在学习Linux系统中,我们需要掌握各种管理的方法和技巧,而管理Linux系统最有效的方法就是命令行的控制.而我在图书馆中读到的< ...

  4. 使用python执行linux命令

    python版本是2.7.12 一.简单的获取linux命令的执行结果,比如:获取一个PID的进程树结构,linux命令是pstree -p pid,在python中有一个模块可以方便的获取.至于有时 ...

  5. 再见Xshell、Xftp!Python执行Linux命令、上传下载远程文件

    相信大家应该都接触过Linux操作系统(Ubuntu.Centos等),那么在使用的Linux操作系统需要使用一些远程ssh工具,尤其是公网服务器. 常用的ssh工具主要有:Xshell.MobaXt ...

  6. python 调用 bash (python 调用linux命令)

    原文这里有显示地址:http://zhou123.blog.51cto.com/4355617/1312791 现在摘取一部分: 这里介绍一下python执行shell命令的四种方法: 1.os模块中 ...

  7. Python解析Linux命令行

    写了个python脚本在linux需要传入参数使用,python参数传入有几个方法, 先用了Python中命令行参数的最传统的方法sys.argv linux cmd ~& python ma ...

  8. python生成linux命令行工具

    您是否也曾一直想生成类似cd, cat等小巧/迷人/实用的小工具作为系统命令或者将python程序打包为exe进行分发?ok,机会来了.利用python 的argparse 和 pyinstaller ...

  9. 用python执行Linux命令

    例1:在python中包装ls命令 #!/usr/bin/env python #python wapper for the ls command import subprocess subproce ...

随机推荐

  1. 【redis】redis基础命令学习集合

    写在前面 Redis是一个高速的内存数据库,它的应用十分广泛,可以说是服务端必学必精的东西.然而,学以致用,无用则无为.学了的东西必须反复的去用,去实践,方能有真知.这篇文章记录了我在redis学习过 ...

  2. [HEOI2013]SAO(树上dp,计数)

    [HEOI2013]SAO (这写了一个晚上QAQ,可能是我太蠢了吧.) 题目说只有\(n-1\)条边,然而每个点又相互联系.说明它的结构是一个类似树的结构,但是是有向边连接的,题目问的是方案个数,那 ...

  3. react native https

    1. ios解决方案 1.1 Xcode打开工程,Libraries -> RCTNetworking -> RCTHTTPRequestHandler.mm -> #pragma ...

  4. CentOS -- RocketMQ HA & Monitoring

    RocketMQ Architecture NameServer Cluster Name Servers provide lightweight service discovery and rout ...

  5. unity之中级工程师

    主要是实际操作. Destroy(游戏对象):会真正销毁游戏对象. 动态链接库 热更新:用户不需要更新整个项目,只需要更新需要更新的部分,使用AssetBundle.PC,Android可以使用逻辑热 ...

  6. Codeforces 1004D

    题意略. 思路: 有两个点要注意一下: 1.这个菱形矩阵是8对称的,也即可以是沿45°对角线对称. 2.菱形矩阵上的数字表明了这个点到中心0点的距离,这对于确定位置有帮助. 这个题目简直刷新人生观,这 ...

  7. spring boot application 配置详情

    # =================================================================== # COMMON SPRING BOOT PROPERTIE ...

  8. javaScript 基础知识汇总(五)

    1.垃圾回收 JavaScript 的内存管理是自动的,不能强制执行或者阻止执行 可达性 JavaScript中主要的内存管理概念是可达性. 什么是可达性? 定义一个对象 let user = { n ...

  9. 学会spss就能找到数据分析工作吗

     大学课堂上学习了spss,老师也讲了很多知识,但是现在准备毕业了,我做的实习工作就是用业内的数据进行最新的行业研究.现在真正需要用到spss进行分析了,我却看不懂老板给的数据和分析要求,难道这就是理 ...

  10. 牛客小白月赛5 E 面积 计算三角形面积模板 波尔约-格维也纳定理 匹克公式

    链接:https://www.nowcoder.com/acm/contest/135/E来源:牛客网 题目描述 定义“最大生成图”:在M*N的点阵中,连接一些点形成一条经过所有点恰好一次的回路,且连 ...