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

python如何执行windows命令

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


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,可执行文件将指定程序使用的 shell。在 Windows 平台上,默认 shell 由 COMSPEC 环境变量指定。

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

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

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

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

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

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

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

参数startupinfo和creationflags只在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)

与子进程交互。向标准输入发送数据,或从标准输出和标准错误读取数据。可选参数输入指定要发送到子进程的参数。 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 将返回一个文件对象,供子进程发送命令。否则返回无。

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
这个人很懒,什么都没写
扫一扫二维码分享