python调用windows程序,python怎么执行命令

  python调用windows程序,python怎么执行命令

  

  python如何执行windows命令?该方法如下:

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

  特点是程序执行时,会键入在Linux上执行cmd的信息。

  进口货

  操作系统( ls )2、使用Popen模块产生新的process

  现在大部分人都喜欢用Popen。Popen方法不会打印出在linux上执行cmd的信息。的确,Popen非常强大,支持多种参数和模式。你需要从子进程导入Popen,PIPE才能使用它。但是Popen函数有一个缺陷,就是它是一个阻塞方法。如果运行cmd时产生大量内容,该功能非常容易被屏蔽。解决方法是不使用wait()方法,但是也不能获得执行的返回值。

  相关:《Python基础教程》

  Popen的原型是:

  子流程。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:指定缓冲区。

  可执行参数用于指定可执行程序。一般来说,我们设置程序通过args参数运行。如果参数shell设置为True,可执行文件将指定程序使用的shell。在windows平台下,缺省shell由COMSPEC环境变量指定。

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

  参数preexec_fn只在Unix平台上有效,用于指定一个可执行对象,在子进程运行前会调用该对象。

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

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

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

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

  参数Universal_newlines:不同操作系统下文本的换行符是不一样的。例如,/r/n 在windows下表示改变,而在Linux下使用/n 。如果该参数设置为True,Python会将这些换行符统一视为/n 。

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

  When子流程。PIPE创建一个Popen对象,子进程。PIPE可以初始化stdin、stdout或stderr参数,以表示与子进程通信的标准流。

  When子流程。STDOUT创建一个Popen对象,它用于初始化stderr参数,这意味着错误将通过标准输出流输出。

  波普方法:

  Popen.poll()用于检查子进程是否已经结束。并设置returncode属性。

  Popen.wait()等待子进程结束。并设置returncode属性。

  打开进程文件指针

  .communicate(input=None)与子进程进行交互。向stdin发送数据,或从stdout和stderr中读取数据。可选参数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.getstatusoutput方法

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

  例如:

  

status,output=commands.getstatusoutput("ls")
还有只获得output和status的方法:

  

commands.getoutput("ls")

  commands.getstatus("ls")

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: