知行编程网知行编程网  2022-12-02 00:00 知行编程网 隐藏边栏  8 
文章评分 0 次,平均分 0.0
导语: 本文主要介绍了关于python如何执行dos命令的相关知识,包括python命令大全,以及python执行cmd命令行这些编程知识,希望对大家有参考作用。

python如何执行DOS命令

1、使用os.system("cmd")

特点是程序在执行时会显示linux正在执行cmd的信息。

import os
os.system("ls")

2. 使用Popen模块产生新的process

现在大多数人都喜欢使用 Popen。 popen方法不会打印出cmd在linux上执行的信息。确实,Popen非常强大,支持多种参数和模式。 from subprocess import Popen,使用前需要PIPE。但是Popen函数有一个缺陷,就是它是一个阻塞方法。如果运行cmd时生成的内容很多,这个函数很容易被阻塞。解决方法是不使用wait()方法,但是获取不到执行的返回值。

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:指定缓冲。

参数executable用于指定可执行程序。一般情况下,我们通过args参数来设置要运行的程序。如果参数 shell 设置为 True,executable 将指定程序使用的 shell。在windows平台下,默认的shell由COMSPEC环境变量指定。

参数stdin、stdout和stderr分别代表程序的标准输入、输出和错误句柄。它们可以是 PIPE、文件描述符或文件对象,也可以设置为 None 以指示从父进程继承。

参数preexec_fn只在Unix平台下有效,用于指定一个可执行对象(callable object),在子进程运行前调用。

参数close_sfs:在windows平台下,如果close_fds设置为True,则新创建的子进程不会继承父进程的输入、输出和错误管道。在重定向子进程的标准输入、输出和错误(stdin、stdout、stderr)时,我们不能将 close_fds 设置为 True。

如果参数shell设为true,程序将通过shell来执行。

参数cwd用于设置子进程的当前目录。

参数env是字典类型,用于指定子进程的环境变量。如果env=None,子进程的环境变量会继承父进程。

参数Universal_newlines:在不同的操作系统下,文本的换行符不同。例如:Windows下用'/r/n'表示变化,Linux下用'/n'。如果此参数设置为 True,则 Python 将这些换行符统一视为 '/n'。

参数startupinfo和createionflags只在windows下有效,它们会被传递给底层的CreateProcess()函数来设置子进程的一些属性,比如:主窗口的外观,进程的优先级等等上。

subprocess.PIPE

创建 Popen 对象时,subprocess.PIPE 可以初始化 stdin、stdout 或 stderr 参数,这些参数表示用于与子进程通信的标准流。

subprocess.STDOUT

创建Popen对象时,用于初始化stderr参数,表示错误通过标准输出流输出。

Popen的方法:

Popen.poll()

用于检查子进程是否已结束。设置并返回 returncode 属性。

Popen.wait()

等待子进程结束。设置并返回returncode属性。

Popen.communicate(input=None)

与子进程交互。将数据发送到 stdin,或从 stdout 和 stderr 读取数据。可选参数输入指定要发送到子进程的参数。 Communicate() 返回一个元组:(stdoutdata, stderrdata)。注意:如果要通过stdin向进程发送数据,在创建Popen对象时,参数stdin必须设置为PIPE。同样,如果要从stdout 和stderr 中获取数据,则必须将stdout 和stderr 设置为PIPE。

Popen.send_signal(signal)

向子进程发送信号。

Popen.terminate()

停止(停止)子进程。在windows平台下,该方法会调用Windows API TerminateProcess()结束子进程。

Popen.kill()

杀死子进程。

Popen.stdin

如果在创建Popen对象时将参数stdin设置为PIPE,则Popen.stdin会返回一个文件对象供子进程发送指令。否则返回无。

Popen.stdout

如果在创建Popen对象时将参数stdout设置为PIPE,Popen.stdout会返回一个文件对象供子进程发送指令。否则返回无。

Popen.stderr

如果在创建Popen对象时将参数stdout设置为PIPE,Popen.stdout会返回一个文件对象供子进程发送指令。否则返回无。

Popen.pid

获取子进程的进程ID。

Popen.returncode

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

例如:

p = Popen("cp -rf a/* b/", shell=True, stdout=PIPE, stderr=PIPE) 
p.wait() 
if p.returncode != 0: 
 print "Error." 
 return -1

3. 使用commands.getstatusoutput方法

该方法不会打印出linux上cmd执行的信息。这种方法的唯一优点是它不是阻塞方法。即不存在Popen函数阻塞的问题。使用前需要导入命令。

例如:

status, output = commands.getstatusoutput("ls")

还有只获得output和status的方法:

commands.getoutput("ls") 
commands.getstatus("ls")

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写
扫一扫二维码分享