美文网首页python3 运维开发动态语言Ruby Python
Python3 提升你脚本的逼格系列(一)

Python3 提升你脚本的逼格系列(一)

作者: 运维开发_西瓜甜 | 来源:发表于2018-11-26 22:21 被阅读106次

    通过输入重定向获取文件

    脚本 filein.py 的内容如下:

    #!/usr/bin/env python3
    
    import fileinput
    
    with fileinput.input() as f:
        tpl = "文件名: {} 行号: {}\n 行内容: {}"
        for line in f:
            print(tpl.format(f.filename(),
                             f.lineno(),
                             line), end='')
    

    使用这个脚本

    chmod +x filein.py
    ./filein.py  top.txt
    

    终止脚本并给出错误信息

    raise SystemExit('It failed!')
    

    执行脚本

    [root@sharkyun ~]# python3 error.py
    It failed!
    [root@sharkyun ~]# echo $?
    1
    

    脚本中输入的密码时隐藏

    import getpass
    user = getpass.getuser()
    passwd = getpass.getpass()
    print(user, passwd)
    
    image.png

    注意 getpass.getuser() 不会提示你输入用户名,而是获取到当运行脚本环境下的系统登录用户

    假如你希望显示,并且使用输入的用户名请用 input() 替代

    user = input('Enter your username: ')
    

    获取终端的大小

    有时候你需要获取运行脚本的大小,以便可以很正确的格式化输出

    image.png
    image.png

    执行系统的命令并返回字符串结果

    import subprocess
    cmd = "top -b -n 1 -o %MEM"
    cmd_ret = subprocess.getoutput(cmd)
    
    lines = cmd_ret.split('\n')
    dt = lines[0].split()[2]
    
    print('获取时间:', dt)
    for i in lines[7:]:
        pid, *_, cpu, mem, _, _ = i.split()
        print(pid, cpu, mem)
    

    复制或者移动文件和目录

    shutil 模块有很多便捷的函数可以复制文件和目录。使用起来也非常简单,比如:

    import shutil
    
    # 一般拷贝
    shutil.copy(src, dst)
    
    # 拷贝文件时候,连同文件的权限也拷贝,相当于 `shell` 中的 `cp -p src dst`
    shutil.copy2(src, dst)
    
    # 递归拷贝,相当于 `shell` 中的 `cp -R src dst`
    shutil.copytree(src, dst)
    
    # 移动文件
    shutil.move(src, dst)
    

    shutil.copytree() 假如被拷贝的对象中出现了符合链接文件,默认会拷贝这个符号链接指向的实际文件,假如只想拷贝符号链接本身,可以传递关键字参数,如下:

    shutil.copytree(src, dst, symlinks=True)
    

    shutil.copytree() 在进行递归拷贝时,还可以指的忽略哪些文件或目录

    shutil.copytree(src, dst, ignore=shutil.ignore_patterns('*.', '*.pyc'))
    

    当执行 shutil.copytree() 的时候,有可能会遇到错误异常的出现,比如一个无效的符合链接,一个无权访问的文件等。

    避免无效的符合链接,只需要这样做

    shutil.copytree(src, dst, ignore_dangling_symlinks=True)
    

    其他的可以用捕获异常来处理

    try:
        shutil.copytree(src, dst)
    except shutil.Error as e:
        for src, dst, msg in e.args[0]:
            print(dst, src, msg)
    

    也可以递归的删除

     shutil.rmtree(dst_dir)
    

    未完,待续...

    相关文章

      网友评论

        本文标题:Python3 提升你脚本的逼格系列(一)

        本文链接:https://www.haomeiwen.com/subject/zxtmqqtx.html