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

看过这篇《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本机器学习电子书

原文地址:https://www.cnblogs.com/moonhmily/p/11565918.html

时间: 2024-09-30 00:27:21

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

python中将linux命令写在一起使用

一般情况下,命令需要用""和,分割,例如: import subprocess subprocess.call(["ls","-la"]) 换一种方式,可以将命令写在一起,例如: import subprocess subprocess.call("ls -la", shell = True)

用python执行Linux命令

例1:在python中包装ls命令 #!/usr/bin/env python#python wapper for the ls commandimport subprocesssubprocess.call(["ls","-l"]) 在Linux中执行该命令 [[email protected] python]# python ls.pytotal 8-rwxrwxrwx 1 root root 415 Mar 18 11:40 a.py-rw-r--r-- 1 

Linux命令之bc - 浮点计算器、进制转换

用途说明 Bash内置了对整数四则运算的支持,但是并不支持浮点运算,而bc命令可以很方便的进行浮点运算,当然整数运算也不再话下.手册页上说bc是An arbitrary precision calculator language,即一个任意精度的计算语言,注意是一种语言,它提供了一些语法结构,比如条件判断.循环等,可以说是很强大的,但是我在实际中还没有找 到需要这个用途的场合 .另外一个用途就是用来进行进制转换. 常用参数 一般情况下,我们使用不带任何参数的bc命令. bc 如果需要bc不输出提

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

<Linux命令行完全技术宝典>读书心得 张栋作者 在学习Linux系统中,我们需要掌握各种管理的方法和技巧,而管理Linux系统最有效的方法就是命令行的控制.而我在图书馆中读到的<Linux命令行完全技术宝典>这本书就是对Linux中国所有所用到的常用命令的总结和讲解. 翻开这本书,我们会看到Linux的命令行在Linux管理中的重要作用.作者分别从命令行与GUI方式实例做比较,再去系统管理方面比较与GUI方式的优越性.让我在学习Linux命令行之前对命令行的重要性有一个大概的认

Python入门--Linux命令入门

Linux命令入门 pwd               显示当前目录 cd                  切换目录  如:cd /   切换到根目录 cd ..               切换到上级目录 ls                   显示当前目录下的所有文件和文件夹 ls -l                列出当前目录下的文件及文件夹的详细信息 ls -a               显示当前目录下所有文件及文件夹(包括隐藏文件) vi .test           创建一

Python解析Linux命令行

写了个python脚本在linux需要传入参数使用,python参数传入有几个方法, 先用了Python中命令行参数的最传统的方法sys.argv linux cmd ~& python main.py --all haha python code:main.py import sys info1 = sys.argv[1] info2 = sys.argv[2] print(info1,type(info1)) print(info2,type(info2)) # output --all &l

Python:模拟linux命令cat

模拟linux的cat命令,打印从命令行输入的文件名 #!/usr/bin/python #Filename:cat.py helpString = '''This program prints files to the standard output. Any number of files can be specified. Options include: --version : Prints the version number --help : Display this help'''

Python之Linux命令

1.查看当前文件路径  :  pwd LangYingdeMacBook-Pro:Users langying$ pwd /Users 2.切换目录 cd 例如:切换到根目录  : cd /   回到上一级目录:cd .. 3. 查看当前目录下的文件  : ls 查看当前目录详细文件信息  :ls -l 更人性化展示列表 : ls-lh    如果第一列第一个字符为d,则代表为目录:如果是-,则为文件 显示隐藏文件 :ls -a LangYingdeMacBook-Pro:Desktop lan

[Python]执行Linux命令

使用subprocess模块 import subprocess # 防火墙服务存在关闭状态 child1 = subprocess.Popen(["systemctl status firewalld | grep Active"], stdout=subprocess.PIPE, shell=True) print(child1.communicate()) #----执行结果------ (b' Active: inactive (dead)\n', None) # samba服