• [python] 执行 dos 命令


    python的os模块

    os模块调用CMD命令有两种方式:os.popen(),os.system(). 都是用当前进程来调用。

    os.system是无法获取返回值的。当运行结束后接着往下面执行程序。用法如:os.system("ipconfig").

    os.popen带返回值的,如何获取返回值。如

    p=os.popen(cmd)

    print(p.read()) 得到的是个字符串。

    这两个都是用当前进程来调用,也就是说它们都是阻塞式的。

    Popen模块产生新的process

    Popen原型:

    subprocess.Popen(args, bufsize=0, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=False, shell=False, cwd=None, env=None, universal_newlines=False, startupinfo=None, creationflags=0) 
    
    • bufsize:指定缓冲
    • stdin, stdout, stderr 分别表示程序的标准输入、输出、错误句柄。他们可以是PIPE,文件描述符或文件对象,也可以设置为None,表示从父进程继承。
    • preexec_fn 只在Unix平台下有效,用于指定一个可执行对象(callable object),它将在子进程运行之前被调用。
    • Close_sfs:在windows平台下,如果close_fds被设置为True,则新创建的子进程将不会继承父进程的输入、输出、错误管 道。
    • shell 设为 true,程序将通过shell来执行。
    • cwd 用于设置子进程的当前目录
    • env 是字典类型,用于指定子进程的环境变量。如果env = None,子进程的环境变量将从父进程中继承。
    • Universal_newlines: 不同操作系统下,文本的换行符是不一样的。如:windows下用’/r/n’表示换,而Linux下用 ‘/n’。如果将此参数设置为True,Python统一把这些换行符当作’/n’来处理。
    • subprocess.PIPE:在创建Popen对象时,subprocess.PIPE可以初始化 stdin, stdout 或 stderr 参数,表示与子进程通信的标准流。
    • subprocess.STDOUT: 创建Popen对象时,用于初始化 stderr 参数,表示将错误通过标准输出流输出。

    Popen的方法:

    • Popen.poll()  用于检查子进程是否已经结束。设置并返回returncode属性
    • Popen.wait()  等待子进程结束。设置并返回returncode属性。
    • Popen.kill() 杀死子进程。

    •  Popen.stdin 如果在创建Popen对象时,参数stdin被设置为PIPE,Popen.stdin将返回一个文件对象用于策子进程发送指令。否则返回None。

    •  Popen.stdout 如果在创建Popen对象时,参数stdout被设置为PIPE,Popen.stdout将返回一个文件对象用于策子进程发送指令。否则返回 None。

    •  Popen.stderr 如果在创建Popen对象时,参数stdout被设置为PIPE,Popen.stdout将返回一个文件对象用于策子进程发送指令。否则返回 None。

    •  Popen.pid 获取子进程的进程ID。

    •  Popen.returncode 获取进程的返回值。如果进程还没有结束,返回None。

    使用

    运行后会在当前进程下面产生子进程。

    sub=subprocess.Popen(cmd,shell=True,stdout=subprocess.PIPE)

    sub.wait()

    out = sub.stdout.read()

    print(out)

  • 相关阅读:
    flume复习(二)
    初级3
    桶排序、计数排序、基数排序的介绍
    Hive编程指南读书笔记(1):
    重写、重载、封装、继承和多态
    Int与Integer的区别
    collect_list/collect_set(列转行)
    Group BY
    H指数
    数据倾斜2
  • 原文地址:https://www.cnblogs.com/P3nguin/p/7592109.html
Copyright © 2020-2023  润新知