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")
本文为原创文章,版权归知行编程网所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ python input()的特点10/31
- ♥ python调用没有()的函数吗?11/16
- ♥ python中self的原理研究12/20
- ♥ python3中如何判断是否为数字10/26
- ♥ python希尔排序的使用原理01/04
- ♥ Python数学建模三剑客之Numpy12/11
内容反馈