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

python 如何执行dos

发布时间:2025-05-09 10:55:21

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,表示从父亲的过程中继承。

相关推荐:Python入门教程

参数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.PIPE可以初始化stdin, 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向其发送数据,则在创建popen对象时,必须将参数stdin设置为PIPE。同样,如果 如果你想从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")

相关文章

python3兼容python2吗

python3兼容python2吗

2025-05-09
python3 whl怎么安装

python3 whl怎么安装

2025-05-09
python 字典怎么提取value

python 字典怎么提取value

2025-05-09
python 怎样计算字符串的长度

python 怎样计算字符串的长度

2025-05-09
python 怎么样反向输出字符串

python 怎么样反向输出字符串

2025-05-09
python 怎么判断字符串开头

python 怎么判断字符串开头

2025-05-09