python 如何执行dos
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")