当前位置: 首页 > 图灵资讯 > 行业资讯> python如何执行dos命令

python如何执行dos命令

发布时间:2026-05-11 10:07:27

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

特点是程序在执行时会在Linux上发布cmd执行信息。

importos
os.system("ls")

2. 使用Popen模块生成新的process。

现在大多数人喜欢使用Popen。Popen方法不会在linux上打印cmd执行的信息。的确,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平台下,COMSPEC环境变量指定默认shell。

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

参数prexec_fn仅在Unix平台下有效指定可执行对象(callable object),在子过程运行前,它将被调用。

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

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

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

参数env是指定子过程的环境变量的字典类型。如果env = None,从父亲的过程中继承子过程的环境变量。

Universal参数newlines:在不同的操作系统下,文本的换行符是不同的。例如,在windows下使用'/r/n'表示更换,Linux下使用 ‘/n'。如果将此参数设置为True,Python将这些换行符作为'/n'来处理。

参数startupinfo和createionflags只在windows下工作,它们将传递给底层的createproces()函数 设置子过程的一些属性,如主窗的外观、过程的优先级等。

subprocess.PIPE

创建Popen对象时,subprocess.Stdin可以初始化PIPE, stdout或stder参数表示与子过程通信的标准流。

subprocess.STDOUT

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

Popen的方法:

Popen.poll()

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

Popen.wait()

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

Popen.communicate(input=None)

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

Popen.send_signal(signal)

向子过程发送信号。

Popen.terminate()

停止(stop)子过程。该方法将在windows平台下调用windows API TerminateProcess()结束子过程。

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。

例如:

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

3. 使用commands使用commandss.getstatusoutput方法

该方法不会打印cmd在linux上执行的信息。这种方法的唯一优点是它不是一种阻塞方法。也就是说,没有Popen函数阻塞的问题。使用前需要import commands。

例如:

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

还有办法只获得output和status:

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

请关注Python视频教程栏目,了解更多Python知识。

相关文章

python如何执行dos命令

python如何执行dos命令

2026-05-11
python sklearn找不到指定模块

python sklearn找不到指定模块

2026-05-11
c调用python怎么释放

c调用python怎么释放

2026-05-11
python-minimal是什么

python-minimal是什么

2026-05-11
做网站用php还是python方便

做网站用php还是python方便

2026-05-11
怎么在python里面调用linux命令

怎么在python里面调用linux命令

2026-05-11