python写linux命令 - CSDN
精华内容
参与话题
  • 这篇文章介绍如何个系统命令以及我为什么要写命令“一切皆文件”是linux的基本哲学之一,我们在linux下执行的诸如ls之类的命令实际上都是去执行了系统上的某个文件,which命令可以...

    这篇文章介绍如何写个系统命令以及我为什么要写命令

    “一切皆文件”是linux的基本哲学之一,我们在linux下执行的诸如ls之类的命令实际上都是去执行了系统上的某个文件,which命令可以查看到我们执行的命令对应的是系统上的哪个文件,例如常用的ls命令实际上就是执行了/bin/ls这个文件

    root@ops-coffee:~# which ls
    /bin/ls
    

    基于此,我们就知道了定义一个命令很简单,只需要写个可执行的文件就行了,python的标准模块argparse就可以帮助我们快速方便的构建一个用户友好的命令

    argparse

    相比于自己实现个命令文件,argparse模块能够自动生成帮助和使用手册,并在用户传入无效参数时报错。一个简单的示例如下

    #!/usr/bin/env python3
    # coding:utf8
    
    import argparse
    
    parser = argparse.ArgumentParser(description='整数处理')
    parser.add_argument('integers', type=int, help='要处理整数')
    
    args = parser.parse_args()
    print(args.integers)
    

    这个示例的意思是接收一个数字,并将这个数字输出,接下来看一下详细的解释

    首先创建了一个ArgumentParser对象,ArgumentParser对象有很多参数可以选择,这里的description定义在参数帮助文档之前显示的文本,通常用来定义这个程序做什么以及怎么做

    parser = argparse.ArgumentParser(description='整数处理')
    

    然后通过add_argumentArgumentParser对象添加参数,第一个参数integers为参数名,type指定类型为inthelp指定这个字段的帮助信息

    parser.add_argument('integers', type=int, help='要处理的整数')
    

    通过调用ArgumentParser对象的parse_args方法返回一个具有所有参数属性的对象

    args = parser.parse_args()
    

    最后通过args.参数名获取到传入的参数值

    print(args.integers)
    

    执行

    我们将以上文件命名为opscoffee,并赋予执行权限,放在系统环境变量/bin下,就可以当作命令直接执行了

    # chmod +x opscoffee
    # mv opscoffee /bin/
    

    如果直接执行opscoffee命令的话将会收到一个报错,提示你必须有一个参数integers

    # opscoffee
    usage: opscoffee [-h] integers
    opscoffee: error: the following arguments are required: integers
    

    同时也通过usage告诉了你这个命令的用法,默认有一个-h参数可以打印命令帮助

    # opscoffee -h
    usage: opscoffee [-h] integers
    
    整数处理
    
    positional arguments:
      integers    要处理的整数
    
    optional arguments:
      -h, --help  show this help message and exit
    

    这就是使用argparse模块的好处,自动生成帮助,提供友好的使用体验

    参数

    argparse能实现的远不止于此,还有更加强大的功能,主要在于add_argument方法参数的运用,以下以一些例子来学习下一些常用的参数

    可选参数

    当我们在参数名前添加-或者--时,argparse会默认认为这是一个可选参数,可以不传值,例如

    parser.add_argument('--age', type=int, help='年龄')
    

    可选参数当没有传值时的默认值为None,可以通过default来设置默认值

    parser.add_argument('--age', type=int, default=37, help='年龄')
    

    当没有参数--age时,显示default设置的值(没有设置default则显示None),有--age则显示--age指定的值

    # opscoffee
    37
    # opscoffee --age 38
    38
    

    如果你想让可选参数也变成必选的,则只需要设置required=True即可

    parser.add_argument('--age', type=int, default=37, required=True, help='年龄')
    

    type

    type用来指定参数的类型,允许任何类型检查和类型转换,例如strintfloatopen甚至是你自定义的方法都可以。

    #!/usr/bin/env python3
    # coding:utf8
    
    import argparse
    
    def even(string):
        value = int(string)
    
        if value%2!=0:
            msg = "%r 不是偶数" % string
            raise argparse.ArgumentTypeError(msg)
        return value
    
    parser = argparse.ArgumentParser(description='整数处理')
    parser.add_argument('integers', type=even, help='要处理的整数')
    
    args = parser.parse_args()
    print(args.integers)
    

    以上命令接收一个参数integers,并将其type设置为了自定义方法even,这个方法会判断用户输入的数字是否是偶数,如果不是则报错,执行结果如下

    # opscoffee 1
    usage: opscoffee [-h] integers
    opscoffee: error: argument integers: '1' 不是偶数
    # opscoffee 2
    2
    

    choices

    choices参数可以限制参数的范围,例如我们只想让用户从opscoffee两个参数中选择一个输入,则可以这样用

    parser.add_argument('site', choices=['ops','coffee'], help='Site')
    

    那么当我们输入的内容不是opscoffee时,则报错

    # opscoffee cn
    usage: opscoffee [-h] {ops,coffee}
    opscoffee: error: argument site: invalid choice: 'cn' (choose from 'ops', 'coffee')
    

    nargs

    通常我们在argparse中定义的参数数量与传入的参数数量应当相等,但有些时候我们需要接收未知数量的参数,nargs就可以帮助我们

    nargs支持以下值:N(整数)、'?''*''+'argarse.REMAINDER

    N: 表示N个参数会被聚集到一个列表中,例如

    import argparse
    
    parser = argparse.ArgumentParser(description='整数处理')
    parser.add_argument('integers', type=int, nargs=2, help='要处理的整数')
    
    args = parser.parse_args()
    print(args.integers)
    

    将输出

    # opscoffee 9 10 
    [9, 10]
    

    '?': 表示使用一个或不使用参数,当不传参数时,默认为None

    parser.add_argument('integers', type=int, nargs='?', help='要处理的整数')
    

    '*': 表示使用所有参数,参数个数可以为0

    parser.add_argument('integers', type=int, nargs='*', help='要处理的整数')
    

    '+':'*'类似,但至少要有一个参数,否则将会报错

    parser.add_argument('integers', type=int, nargs='+', help='要处理的整数')
    

    自定义命令

    先说我为什么要写个系统命令?

    文章『Probius:一个功能强大的自定义任务系统』中介绍了我们的自定义任务系统,这个系统可以用来编排任务,而在编排CICD任务中会用到配置文件,我们的配置文件都是通过Kerrigan配置中心来管理的,目前获取配置中心的配置主要有两种方法

    1.  配合confd服务自动拉取更新,详细内容可以查看这篇文章:中小团队落地配置中心详解

    2.  配置中心提供API,可以通过API获取配置内容

    脚本里如果想要使用配置中心的配置,则只能通过API的方式去获取,这样就要在每个需要用到配置的地方写一段代码来获取及处理,不仅会出现大量的重复代码,并且非常的不优雅,更为重要的是请求API的Token将会出现在脚本里,带来一定的安全风险

    基于以上考虑,写个自定义命令来做这件事情更为妥当,于是便写了下边这个命令

    #!/usr/bin/env python3
    # coding:utf8
    
    # 这是一个系统命令用来获取kerrigan配置中心的配置并写入本地文件,需要将此文件copy到目录/bin下
    
    import sys
    import argparse
    import requests
    
    parser = argparse.ArgumentParser(description='获取配置中心Kerrigan配置')
    
    parser.add_argument('configkey', type=str, help='配置中心中文件的Key')
    parser.add_argument('localfile', type=str, help='保存到本地文件的路径')
    
    args = parser.parse_args()
    
    # 获得传入的参数
    configkey = args.configkey
    localfile = args.localfile
    
    header = {
        'Authorization': 'Token eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.JTdCJTIyZXhwJTIyJTNBMTkwNjcwNzAyMCUyQyUyMmlhdCUyMiUzQTE1OTEzNDcwMjAlMkMlMjJkYXRhJTIyJTNBJTdCJTIydXNlcm5hbWUlMjIlM0ElMjJwcm9iaXVzQG9wcy1jb2ZmZWUuY24lMjIlN0QlN0Q.ops1ZNhq19XSEL2PUo-iQqzbhimDnpFiYc_7EUXftF4'}
    
    uri = 'http://kerrigan.ops-coffee.cn/api/config/?key=' + configkey
    r = requests.get(uri, headers=header)
    
    if r.json()['state']:
        content = r.json()['message']['content']
    
        try:
            with open(localfile, 'w') as f:
                f.write(content)
    
            sys.exit(0)
        except Exception as e:
            print('write local file failed: ', str(e))
            sys.exit(3)
    else:
        print('get config failed: ', r.json()['message'])
        sys.exit(1)
    

    以上代码的意思是根据传入的key和file路径,去配置中心获取对应配置文件的内容并写入到本地file中。需要注意的是exit,返回合适的退出状态是个很好的习惯,这样我们就可以通过$?来获取命令执行成功还是失败

    将此文件命名为getconfig并移动到/bin目录下添加执行权限,就可以在系统任何地方使用getconfig命令了

    # getconfig /conf/coffee/prod/docker/Dockerfile  /home/project/coffee/Dockerfile
    
    展开全文
  • Python 运维 Linux基本命令(一)

    千次阅读 2018-11-02 18:02:00
    1. Linux 运维工程师的职责 2. 开发、测试、运维工程师的开发流程 开发需要将项目代码实现–>提交给测试工程师进行测试–>测试完成后,提交给运维工程师进行上线,发布...

    1. Linux 运维工程师的职责
    在这里插入图片描述

    2. 开发、测试、运维工程师的开发流程

    在这里插入图片描述

    开发需要将项目代码实现–>提交给测试工程师进行测试–>测试完成后,提交给运维工程师进行上线,发布、运行、维护,给用户提供服务(数据服务)

    3.Centos、Ubuntu、Debian三个都是Linux非常优秀的系统,开源,分收费的商业版和免费版
    Centos 是从Redhat源代码编译重新发布版,命令行操作可以方便管理系统和应用,并且有帮助文档和社区的支持
    Ubuntu 有着靓丽的用户界面,完善的包管理系统,强大的软件源支持,丰富的技术社区,并且对计算机硬件的要求优于Centos和Debian,兼容性强,但对于服务器来说,并不需要太多的应用程序,需要的稳定,操作方便,维护简单的系统
    4.Linux常用的命令 shell命令行来实现的
    pwd 获取当前目录的绝对路径
    cd change direct 改变目录
    ls 查看目录下的所有文件
    docker images 查看当前目录下的所有镜像
    vi 输入 i 表示编辑 输入:w 写入文件并保存 输入:q 退出
    可以连写 :wq 写入保存并退出
    :q! 强制退出
    cat filename 表示将filename文件内容打印到终端
    cp file1 newfile1 拷贝file1并新建newfile1文件
    cp -r 目录1 目录2 拷贝目录1 并新建目录2
    -r 表示递归复制目录大的内容
    rm filename 删除文件 删除文件目录需加 -r
    mv -f file1 file2 将file1强制放入file2中
    tar -cvf file filename1 将文件压缩到file中
    tar -xvf file 将file文件解压

    5.Linux 系统的目录结构
    在这里插入图片描述

    第一列 表示文件的权限 由二进制组成 分为三组 最高权限为7 分为读写 只读 只写
    第二列 表示文件下数量
    第三列 文件的时间
    第四列 文件的名称

    在这里插入图片描述

    命令

    功能说明

    线上查询及帮助命令 (2 个)

    man

    查看命令帮助,命令的词典,更复杂的还有 info,但不常用。

    help

    查看 Linux 内置命令的帮助,比如 cd 命令。

    文件和目录操作命令 (18 个)

    ls

    全拼 list,功能是列出目录的内容及其内容属性信息。

    cd

    全拼 change directory,功能是从当前工作目录切换到指定的工作目录。

    cp

    全拼 copy,其功能为复制文件或目录。

    find

    查找的意思,用于查找目录及目录下的文件。

    mkdir

    全拼 make directories,其功能是创建目录。

    mv

    全拼 move,其功能是移动或重命名文件。

    pwd

    全拼 print working directory,其功能是显示当前工作目录的绝对路径。

    rename

    用于重命名文件。

    rm

    全拼 remove,其功能是删除一个或多个文件或目录。

    rmdir

    全拼 remove empty directories,功能是删除空目录。

    touch

    创建新的空文件,改变已有文件的时间戳属性。

    tree

    功能是以树形结构显示目录下的内容。

    basename

    显示文件名或目录名。

    dirname

    显示文件或目录路径。

    chattr

    改变文件的扩展属性。

    lsattr

    查看文件扩展属性。

    file

    显示文件的类型。

    md5sum

    计算和校验文件的 MD5 值。

    查看文件及内容处理命令(21 个)

    cat

    全拼 concatenate,功能是用于连接多个文件并且打印到屏幕输出或重定向到指定文件中。

    tac

    tac 是 cat 的反向拼写,因此命令的功能为反向显示文件内容。

    more

    分页显示文件内容。

    less

    分页显示文件内容,more 命令的相反用法。

    head

    显示文件内容的头部。

    tail

    显示文件内容的尾部。

    cut

    将文件的每一行按指定分隔符分割并输出。

    split

    分割文件为不同的小片段。

    paste

    按行合并文件内容。

    sort

    对文件的文本内容排序。

    uniq

    去除重复行。oldboy

    wc

    统计文件的行数、单词数或字节数。

    iconv

    转换文件的编码格式。

    dos2unix

    将 DOS 格式文件转换成 UNIX 格式。

    diff

    全拼 difference,比较文件的差异,常用于文本文件。

    vimdiff

    命令行可视化文件比较工具,常用于文本文件。

    rev

    反向输出文件内容。

    grep/egrep

    过滤字符串,三剑客老三。

    join

    按两个文件的相同字段合并。

    tr

    替换或删除字符。

    vi/vim

    命令行文本编辑器。

    文件压缩及解压缩命令(4 个)

    tar

    打包压缩。oldboy

    unzip

    解压文件。

    gzip

    gzip 压缩工具。

    zip

    压缩工具。

    信息显示命令(11 个)

    uname

    显示操作系统相关信息的命令。

    hostname

    显示或者设置当前系统的主机名。

    dmesg

    显示开机信息,用于诊断系统故障。

    uptime

    显示系统运行时间及负载。

    stat

    显示文件或文件系统的状态。

    du

    计算磁盘空间使用情况。

    df

    报告文件系统磁盘空间的使用情况。

    top

    实时显示系统资源使用情况。

    free

    查看系统内存。

    date

    显示与设置系统时间。

    cal

    查看日历等时间信息。

    搜索文件命令(4 个)

    which

    查找二进制命令,按环境变量 PATH 路径查找。

    find

    从磁盘遍历查找文件或目录。

    whereis

    查找二进制命令,按环境变量 PATH 路径查找。

    locate

    从数据库 (/var/lib/mlocate/mlocate.db) 查找命令,使用 updatedb 更新库。

    用户管理命令(10 个)

    useradd

    添加用户。

    usermod

    修改系统已经存在的用户属性。

    userdel

    删除用户。

    groupadd

    添加用户组。

    passwd

    修改用户密码。

    chage

    修改用户密码有效期限。

    id

    查看用户的 uid,gid 及归属的用户组。

    su

    切换用户身份。

    visudo

    编辑 / etc/sudoers 文件的专属命令。

    sudo

    以另外一个用户身份(默认 root 用户)执行事先在 sudoers 文件允许的命令。

    基础网络操作命令(11 个)

    telnet

    使用 TELNET 协议远程登录。

    ssh

    使用 SSH 加密协议远程登录。

    scp

    全拼 secure copy,用于不同主机之间复制文件。

    wget

    命令行下载文件。

    ping

    测试主机之间网络的连通性。

    route

    显示和设置 linux 系统的路由表。

    ifconfig

    查看、配置、启用或禁用网络接口的命令。

    ifup

    启动网卡。

    ifdown

    关闭网卡。

    netstat

    查看网络状态。

    ss

    查看网络状态。

    深入网络操作命令(9 个)

    nmap

    网络扫描命令。

    lsof

    全名 list open files,也就是列举系统中已经被打开的文件。

    mail

    发送和接收邮件。

    mutt

    邮件管理命令。

    nslookup

    交互式查询互联网 DNS 服务器的命令。

    dig

    查找 DNS 解析过程。

    host

    查询 DNS 的命令。

    traceroute

    追踪数据传输路由状况。

    tcpdump

    命令行的抓包工具。

    有关磁盘与文件系统的命令(16 个)

    mount

    挂载文件系统。

    umount

    卸载文件系统。

    fsck

    检查并修复 Linux 文件系统。

    dd

    转换或复制文件。

    dumpe2fs

    导出 ext2/ext3/ext4 文件系统信息。

    dump

    ext2/3/4 文件系统备份工具。

    fdisk

    磁盘分区命令,适用于 2TB 以下磁盘分区。

    parted

    磁盘分区命令,没有磁盘大小限制,常用于 2TB 以下磁盘分区。

    mkfs

    格式化创建 Linux 文件系统。

    partprobe

    更新内核的硬盘分区表信息。

    e2fsck

    检查 ext2/ext3/ext4 类型文件系统。

    mkswap

    创建 Linux 交换分区。

    swapon

    启用交换分区。

    swapoff

    关闭交换分区。

    sync

    将内存缓冲区内的数据写入磁盘。

    resize2fs

    调整 ext2/ext3/ext4 文件系统大小。

    系统权限及用户授权相关命令(4 个)

    chmod

    改变文件或目录权限。

    chown

    改变文件或目录的属主和属组。

    chgrp

    更改文件用户组。

    umask

    显示或设置权限掩码。

    查看系统用户登陆信息的命令(7 个)

    whoami

    显示当前有效的用户名称,相当于执行 id -un 命令。

    who

    显示目前登录系统的用户信息。

    w

    显示已经登陆系统的用户列表,并显示用户正在执行的指令。

    last

    显示登入系统的用户。

    lastlog

    显示系统中所有用户最近一次登录信息。

    users

    显示当前登录系统的所有用户的用户列表。

    finger

    查找并显示用户信息。

    内置命令及其它(19 个)

    echo

    打印变量,或直接输出指定的字符串

    printf

    将结果格式化输出到标准输出。

    rpm

    管理 rpm 包的命令。

    yum

    自动化简单化地管理 rpm 包的命令。

    watch

    周期性的执行给定的命令,并将命令的输出以全屏方式显示。

    alias

    设置系统别名。

    unalias

    取消系统别名。

    date

    查看或设置系统时间。

    clear

    清除屏幕,简称清屏。

    history

    查看命令执行的历史纪录。

    eject

    弹出光驱。

    time

    计算命令执行时间。

    nc

    功能强大的网络工具。

    xargs

    将标准输入转换成命令行参数。

    exec

    调用并执行指令的命令。

    export

    设置或者显示环境变量。

    unset

    删除变量或函数。

    type

    用于判断另外一个命令是否是内置命令。

    bc

    命令行科学计算器

    系统管理与性能监视命令 (9 个)

    chkconfig

    管理 Linux 系统开机启动项。

    vmstat

    虚拟内存统计。

    mpstat

    显示各个可用 CPU 的状态统计。

    iostat

    统计系统 IO。

    sar

    全面地获取系统的 CPU、运行队列、磁盘 I/O、分页(交换区)、内存、 CPU 中断和网络等性能数据。

    ipcs

    用于报告 Linux 中进程间通信设施的状态,显示的信息包括消息列表、共享内存和信号量的信息。

    ipcrm

    用来删除一个或更多的消息队列、信号量集或者共享内存标识。

    strace

    用于诊断、调试 Linux 用户空间跟踪器。我们用它来监控用户空间进程和内核的交互,比如系统调用、信号传递、进程状态变更等。

    ltrace

    命令会跟踪进程的库函数调用, 它会显现出哪个库函数被调用。

    关机 / 重启 / 注销和查看系统信息的命令(6 个)

    shutdown

    关机。

    halt

    关机。

    poweroff

    关闭电源。

    logout

    退出当前登录的 Shell。

    exit

    退出当前登录的 Shell。

    Ctrl+d

    退出当前登录的 Shell 的快捷键。

    进程管理相关命令(15 个)

    bg

    将一个在后台暂停的命令,变成继续执行 (在后台执行)。

    fg

    将后台中的命令调至前台继续运行。

    jobs

    查看当前有多少在后台运行的命令。

    kill

    终止进程。

    killall

    通过进程名终止进程。

    pkill

    通过进程名终止进程。

    crontab

    定时任务命令。

    ps

    显示进程的快照。

    pstree

    树形显示进程。

    nice/renice

    调整程序运行的优先级。

    nohup

    忽略挂起信号运行指定的命令。

    pgrep

    查找匹配条件的进程。

    runlevel

    查看系统当前运行级别。

    init

    切换运行级别。

    service

    启动、停止、重新启动和关闭系统服务,还可以显示所有系统服务的当前状态。

    展开全文
  • 作为零基础 / 小白 / 入门 的你来说做一个博客还要学 web ...一个 ls 非常简单,你只需要会一点 linux 的基础知识,知道 ls 能做什么就好了。 那今天就给大家码了一个哪哪能用的 ls.py ,没错,windows 也可以哦~

    在这里插入图片描述

    看过这篇《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命令

    千次阅读 2019-06-03 17:46:33
    python脚本中使用Linux命令

    利用os模块

    1、

    import os
    os.system("ls")
    

    在这里插入图片描述
    2、

    import os
    a=os.system("ls")
    

    得到的是执行的命令的返回值,并不是执行结果
    在这里插入图片描述
    3、

    import os
    b=os.popen('ls').readlines()
    

    将得到的结果直接赋值给b列表
    在这里插入图片描述
    4、os模块中常见方法(Linux命令)
    os.remove():删除文件

    os.rename():重命名文件

    os.walk():生成目录树下的所有文件名

    os.chdir():改变目录

    os.mkdir/makedirs:创建目录/多层目录

    os.rmdir/removedirs:删除目录/多层目录

    os.listdir():列出指定目录的文件

    os.getcwd():取得当前工作目录

    os.chmod():改变目录权限

    os.path.basename():去掉目录路径,返回文件名

    os.path.dirname():去掉文件名,返回目录路径

    os.path.join():将分离的各部分组合成一个路径名

    os.path.getsize():返回文件大小

    os.path.exists():是否存在

    os.path.isabs():是否为绝对路径

    os.path.isdir():是否为目录

    os.path.isfile():是否为文件

    使用commands模块

    import commands
    c=commands.getoutput('ls')      //将结果以字符串格式赋值给c
    d=c.split('\n')                //对字符串进行分割
    

    在这里插入图片描述

    展开全文
  • linux系统编写命令-ck #!/usr/bin/python3 import argparse from pathlib import Path parser = argparse.ArgumentParser(prog="ck",add_help=True,\ description="this canmand is us...
  • Linux下查看python版本号

    万次阅读 2018-08-24 09:06:02
    方法一 执行命令python -V 方法二 执行命令:whereis python 方法三 执行命令python
  • 注意要在终端中执行命令python test.py os.system(cmd) 返回值为0:代表成功;1:代表失败 os.popen(cmd) 将执行结果返回,但是测试表示并没有,具体原因后期记得更新 连续执行多条命令 os.popen("cd.. &...
  • Linux下怎么创建python文件,以及运行

    万次阅读 多人点赞 2018-05-28 23:12:49
    第一步创建一个文件夹test第二部,打开终端进入该文件第三步,vim test.py好程序,编辑好之后按Esc切换到命令模式,然后输入 :wq 回车就自动保存完成了,然后输入python test.py 运行程序得出结果...
  • Linux系统安装Python3环境(超详细)

    万次阅读 多人点赞 2020-05-06 20:34:44
    1、默认情况下,Linux会自带安装Python,可以运行python --version命令查看,如图: 我们看到Linux中已经自带了Python2.7.5。再次运行python命令后就可以使用python命令窗口了(Ctrl+D退出python命令窗口)。 2...
  • Linux shell脚本执行Python脚本

    万次阅读 2017-04-17 16:18:41
    今天想做个定时器,用shell脚本执行...看了一篇博客解决了问题: 使用Python的时候最好指定地址:/usr/local/bin/python2.7 main.py以上只是我的Python命令地址,每个人不尽相同 原博客地址:http://blog.csdn.
  • Python3 执行Linux Bash命令

    万次阅读 2017-08-19 10:59:58
    和之前C++执行Linux Bash命令 一样,Python依然支持system调用和popen()函数来执行linux bash命令。方法一:system调用#仅仅在一个子终端运行系统命令,而不能获取命令执行后的返回信息 import os os.system('ls')...
  • python脚本在linux上运行的两种方式

    万次阅读 2018-08-22 14:41:56
    其中python可以python的绝对路径。使用which python进行查询。   2、在文件的头部(第一行)上#!/usr/bin/python2.7,这个地方使用python的绝对路径,就是上面用which python查询来的结果。 再用chmod改变...
  • linux环境下退出python命令模式

    万次阅读 2019-09-02 18:09:19
    linux环境下退出python命令模式 原创 2016年11月03日 10:36:30 如果在命令行终端已经进入到python命令模式,如下 Python2.7.7(default,Jun32014,01:46:20) [GCC4.9.020140521(prerelease)]onlinux2 Type"help",...
  • 目录一、Linux下安装Python二、LinuxPython安装完成后如何使用pip命令三、LinuxPython安装完成后如何使用yum命令四、Linux下安装Anaconda五、Linux下使用anaconda安装Keras 上一篇博客我们主要讨论了如何在...
  • Linux查看文件路径

    万次阅读 2017-12-21 16:22:58
    Linux下有两个命令可以查看命令或者文件所在的位置 1.which which 用来查看当前要执行的命令所在的路径 举个例子: [root@admin ~]# which python /usr/bin/python 意思就是说:如果我直接输入 python ,那么输出的...
  • linux下执行python脚本的两种方式

    万次阅读 2018-10-11 10:02:45
    其中python可以python的绝对路径。使用which python进行查询。 2、在文件的头部(第一行)上#!/usr/bin/python2.7,这个地方使用python的绝对路径,就是上面用which python查询来的结果。 再用chmod改变文件的...
  • linux-python升级到最新版本

    千次阅读 2018-05-24 11:23:48
    创建目录python3.6.5安装目录: mkdir /usr/local/python3.6.5 ...执行以下命令,下载python安装包 wget https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tgz 解压安装包 tar -xzvf Python-3.6.5...
  • /bin/sh: python3: 未找到命令 原因: 我使用 anaconda3 装的python3 装好后,并没有默认将Python3 配置到环境变量下, 所以,自己配置一下就行了,我直接建了个软连接,问题解决! cd /usr/...
  • Linux环境下Python的安装过程

    万次阅读 多人点赞 2012-06-22 13:35:51
    Linux环境下Python的安装过程 前言 一般情况下,Linux都会预装 Python了,但是这个预装的Python版本一般都非常低,很多 Python的新特性都没有,必须重新安装新一点的版本,从下边的截图,可以看到我的 ...
  • Linux下执行Python脚本

    万次阅读 多人点赞 2019-07-04 23:48:33
    1.Linux Python环境 Linux系统一般集成Python,如果没有安装,可以手动安装,联网状态下可直接安装。Fedora下使用yum install,Ubuntu下使用apt-get install,前提都是root权限。安装完毕,可将Python加入环境变量...
1 2 3 4 5 ... 20
收藏数 240,591
精华内容 96,236
热门标签
关键字:

python写linux命令