subprocess执行系统命令

call:执行命令,返回状态码

  1. #!/usr/bin/env python
  2. # _*_ coding:utf-8 _*_
  3. __Author__ = 'KongZhaGen'
  4. import subprocess
  5. # call模块默认接受列表形式的命令
  6. ret = subprocess.call(['df','-h'], shell=False)
  7. # 当shell=True时,call也可以接受字符串形式的命令
  8. ret = subprocess.call("df -h", shell=True)
  9. # 返回状态码,0正确,非0错误
  10. print ret

check_call:如果状态码是0,

  1. #!/usr/bin/env python
  2. # _*_ coding:utf-8 _*_
  3. __Author__ = 'KongZhaGen'
  4. import subprocess
  5.  
  6. ret = subprocess.check_call("df -h")
  7. print ret

check_out:执行结果为0,返回结果,否则抛出异常

  1. #!/usr/bin/env python
  2. # _*_ coding:utf-8 _*_
  3. __Author__ = 'KongZhaGen'
  4. import subprocess
  5.  
  6. ret = subprocess.check_output("df -h")
  7. print ret

subprocess.Popen(...)

用于执行复杂的系统命令

参数:

    • args:shell命令,可以是字符串或者序列类型(如:list,元组)
    • bufsize:指定缓冲。0 无缓冲,1 行缓冲,其他 缓冲区大小,负值 系统缓冲
    • stdin, stdout, stderr:分别表示程序的标准输入、输出、错误句柄
    • preexec_fn:只在Unix平台下有效,用于指定一个可执行对象(callable object),它将在子进程运行之前被调用
    • close_sfs:在windows平台下,如果close_fds被设置为True,则新创建的子进程将不会继承父进程的输入、输出、错误管道。
      所以不能将close_fds设置为True同时重定向子进程的标准输入、输出与错误(stdin, stdout, stderr)。
    • shell:同上
    • cwd:用于设置子进程的当前目录
    • env:用于指定子进程的环境变量。如果env = None,子进程的环境变量将从父进程中继承。
    • universal_newlines:不同系统的换行符不同,True -> 同意使用 \n
    • startupinfo与createionflags只在windows下有效
      将被传递给底层的CreateProcess()函数,用于设置子进程的一些属性,如:主窗口的外观,进程的优先级等等

示例:

  1. communicate:执行输入的命令,结果返回为元组(stdout,stderr)
  1. #!/usr/bin/env python
  2. # _*_ coding:utf-8 _*_
  3. __Author__ = 'KongZhaGen'
  4. import subprocess
  5.  
  6. # 作为与进程的交互,stdin将命令发送子进程,stdout,stderr读取执行结果,等待进程结束
  7. obj = subprocess.Popen(["ipconfig","-all"], stdin=subprocess.PIPE, stdout=subprocess.PIPE)
  8. (out,err) = obj.communicate()
  9. '''
  10. Interact with process: Send data to stdin. Read data from
  11. stdout and stderr, until end-of-file is reached. Wait for
  12. process to terminate. The optional input argument should be a
  13. string to be sent to the child process, or None, if no data
  14. should be sent to the child.
  15.  
  16. communicate() returns a tuple (stdout, stderr).
  17. '''
  18. print out

如果在交互模式下执行多个命令怎么办?

shutil:高级的 文件、文件夹、压缩包 处理模块

1、将文件内容从一个文件拷贝到另一个文件中去,可以是部分数据

  1. def copyfileobj(fsrc, fdst, length=16*1024):
    """copy data from file-like object fsrc to file-like object fdst"""
    while 1:
    buf = fsrc.read(length)
    if not buf:
    break
    fdst.write(buf)
  2.  
  1. #!/usr/bin/env python
  2. # _*_ coding:utf-8 _*_
  3. __Author__ = 'KongZhaGen'
  4. import shutil
  5.  
  6. fp_src = open("three-level-menu.py",'r')
  7. fp_dst = open("user_lock.key",'w')
  8.  
  9. shutil.copyfileobj(fp_src,fp_dst)
  10.  
  11. fp_src.close()
  12. fp_dst.close()

2、拷贝文件

  1. def copyfile(src, dst):
    """Copy data from src to dst"""
    if _samefile(src, dst):
    raise Error("`%s` and `%s` are the same file" % (src, dst))
  2.  
  3. for fn in [src, dst]:
    try:
    st = os.stat(fn)
    except OSError:
    # File most likely does not exist
    pass
    else:
    # XXX What about other special files? (sockets, devices...)
    if stat.S_ISFIFO(st.st_mode):
    raise SpecialFileError("`%s` is a named pipe" % fn)
  4.  
  5. with open(src, 'rb') as fsrc:
    with open(dst, 'wb') as fdst:
    copyfileobj(fsrc, fdst)
  1. #!/usr/bin/env python
  2. # _*_ coding:utf-8 _*_
  3. __Author__ = 'KongZhaGen'
  4. import shutil
  5.  
  6. shutil.copyfile("three-level-menu.py","user_auth.py")

3、shutil.copymode(src, dst)
仅拷贝权限。内容、组、用户均不变

4、shutil.copystat(src, dst)
拷贝状态的信息,包括:mode bits, atime, mtime, flags

5、shutil.copy(src, dst)
拷贝文件和权限

6、shutil.copy2(src, dst)
拷贝文件和状态信息

7、

shutil.ignore_patterns(*patterns)
shutil.copytree(src, dst, symlinks=False, ignore=None)
递归的去拷贝文件

例如:copytree(source, destination, ignore=ignore_patterns('*.pyc', 'tmp*'))

8、shutil.rmtree(path[, ignore_errors[, onerror]])
递归的去删除文件

9、shutil.move(src, dst)
递归的去移动文件

10、shutil.make_archive(base_name, format,...)

创建压缩包并返回文件路径,例如:zip、tar

    • base_name: 压缩包的文件名,也可以是压缩包的路径。只是文件名时,则保存至当前目录,否则保存至指定路径,
      如:www                        =>保存至当前路径
      如:/Users/wupeiqi/www =>保存至/Users/wupeiqi/
    • format: 压缩包种类,“zip”, “tar”, “bztar”,“gztar”
    • root_dir: 要压缩的文件夹路径(默认当前目录)
    • owner: 用户,默认当前用户
    • group: 组,默认当前组
    • logger: 用于记录日志,通常是logging.Logger对象
  1. #将 /Users/wupeiqi/Downloads/test 下的文件打包放置当前程序目录
  2.  
  3. import shutil
  4. ret = shutil.make_archive("wwwwwwwwww", 'gztar', root_dir='/Users/wupeiqi/Downloads/test')
  5.  
  6. #将 /Users/wupeiqi/Downloads/test 下的文件打包放置 /Users/wupeiqi/目录
  7. import shutil
  8. ret = shutil.make_archive("/Users/wupeiqi/wwwwwwwwww", 'gztar', root_dir='/Users/wupeiqi/Downloads/test')

python之系统命令的更多相关文章

  1. Python执行系统命令的方法 os.system(),os.popen(),commands

    os.popen():用python执行shell的命令,并且返回了结果,括号中是写shell命令 Python执行系统命令的方法: https://my.oschina.net/renwofei42 ...

  2. python 调用系统命令

    Python执行系统命令一般的用到了四种方法, 第一种是 os.system(),  这个方法比较常用, 使用也简单, 会自动的生成一个进程,在进程完成后会自动退出, 需要注意的是 os.system ...

  3. python调用系统命令 shell命令

    使用python调用系统命令,基本有3种选择: 1. 使用os模块的system方法 import os os.system('ls') 2. 使用os模块的popen方法 import os os. ...

  4. windows linux 使用python执行系统命令并将结果保存到变量

    最近需要用到os.system 发现不能赋值到变量 后查有更新的模块,如下: os.system os.spawn* os.popen* popen2.* commands.* 重新使用content ...

  5. 转 Python执行系统命令的方法

    传送门 Python执行系统命令的方法 http://www.linux-field.com/?p=15 Python中执行系统命令常见方法有两种: 两者均需 import os (1) os.sys ...

  6. Python执行系统命令并获得输出的几种方法

    [root@a upfc]# ./ffmpeg-linux64-v3.3.1 -i a.mp3 ffmpeg version N-86111-ga441aa90e8-static http://joh ...

  7. python 执行系统命令模块比较

    python 执行系统命令模块比较 1.os.system模块 仅仅在子终端运行命令,返回状态码,0为成功,其他为失败,但是不返回执行结果 如果再命令行下执行,结果直接打印出来 >>> ...

  8. Python 调用系统命令的模块 Subprocess

    Python 调用系统命令的模块 Subprocess 有些时候需要调用系统内部的一些命令,或者给某个应用命令传不定参数时可以使用该模块. 初识 Subprocess 模块 Subprocess 模块 ...

  9. python执行系统命令后获取返回值的几种方式集合

    python执行系统命令后获取返回值的几种方式集合 今天小编就为大家分享一篇python执行系统命令后获取返回值的几种方式集合,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧 第一种情 ...

  10. Python执行系统命令的方法

    Python中执行系统命令常见方法有两种: 两者均需 import os (1) os.system # 仅仅在一个子终端运行系统命令,而不能获取命令执行后的返回信息 system(command) ...

随机推荐

  1. gcc 编译问题

    一般情况一句话即可: gcc -o fuck fuck.c ./fuck 直接运行了 问题 1. 报错 ld 未找到 此时,gcc编译得分布来,并且指定特定的ld gcc -c  1.c //会在目录 ...

  2. Javac语法糖之TryCatchFinally

    https://docs.oracle.com/javase/specs/jls/se7/html/jls-14.html#jls-14.20.3 Optionally replace a try s ...

  3. springboot-18-springboot的参数封装

    springboot的参数封装, 和springmvc相识 简单参数的封装 1.直接把表单的参数写在Controller相应的方法的形参中,适用于get方式提交,不适用于post方式提交. /** * ...

  4. php中文转拼音2

    <?php /** * strtopinyin.php * * @name 汉字字符转拼音 * @author Kudosharry * @version v1.0 * */ class Str ...

  5. Cookie文件说明及IE的Cookie文件格式

    1.Cookie文件的实质 Cookie实际上是Web服务端与客户端(典型的是浏览器)交互时彼此传递的一部分内容,内容可以是任意的,但要在允许的长度范围之内.客户端会将它保存在本地机器上(如IE便会保 ...

  6. lucene源码分析(4)Similarity相似度算法

    lucene 7.5.0默认的评分Similarity是BM25Similarity (IndexSearcher.java) // the default Similarity private st ...

  7. Linux下svn服务器搭建

    初次在linux上搭建svn服务器,本来以为很繁琐,其实很简单,主要分为以下几个步骤: 1.  首先安装subversion,命令:yum install subversion 2.  创建svn仓库 ...

  8. Linux进程管理四大工具ps \dstat\ top\ htop

    Linux进程管理之“四大名捕” 一.四大名捕 四大名捕,最初出现于温瑞安创作的武侠小说,是朝廷中正义力量诸葛小花的四大徒弟,四人各怀绝技,分别是轻功暗器高手“无情”.内功卓越的高手“铁手”.腿功惊人 ...

  9. [javaSE] 集合框架(共性方法)

    Collection接口的常用方法 add(),添加一个元素 addAll(),添加一组元素 clear(),清空 remove(),移除一个 removeAll(),移除一组 size(),元素个数 ...

  10. int类型转换byte类型

    计算机中,int类型占用4个字节,byte类型占用1个字节: 当int类型强转为byte类型时,计算机会截取最后的八位(1个字节): 由于计算机存储数据时,都是以补码的形式进行存储. 然而,我们通常看 ...