调用系统命令

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

1、简单的调用1.1 os.systemimport os

os.system('dir')

dir产生的屏显将直接出现在当前的屏幕上。

返回值和执行环境有关。如果是windows的cmd.exe环境,返回值是状态码。0代表成功,1代表失败。比如,如果不小心敲错了,把dir写成了ddir,那么由于找不到这条命令,返回码会是1。

1.2 subPRocess.callimport subprocess

subprocess.call('dir',shell=True)

效果同上。

因为dir是cmd.exe的内置命令,所以需指出shell=True,强调这条命令要被放在shell(cmd.exe)中执行的。如果这个参数缺失,dir会被当做一般的可执行文件直接调用,由于找不到名为dir的可执行文件,会报错。

1.3 subprocess.Popenimport subprocess

subprocess.Popen('dir',shell=True)

这个和上一条基本是等价的。不同之处在于,call返回的是状态码,而Popen返回的是一个进程对象,这个对象可以有更高级的用途,下面将说到。

2、捕获屏幕输出2.1 Popen.stdout如果想检查一下执行过程中的屏显,而不是直接抛给用户,那就涉及到Popen的高级用途了

from subprocess import Popen, PipE

p = Popen("dir", shell=True, stdout=PIPE)

output = p.stdout.read() #捕获屏显,而不是直接显示给用户

print output

这里PIPE就是一个常量,等于-1。将其赋给参数stdout有一个特殊的含义,那就是将执行所产生的屏显重新定向到Popen.stdout。

Popen.stdout是一个管道对象,可以通过read、readline等方法读取管道的内容。

3、进一步交互3.1 Popen.communicate如果调用程序之后还需要进行输入输出的交互,那么就要用到communicate函数。

下面的代码先打开一个cmd.exe进程,然后在其中执行dir命令,然后捕获输出。

from subprocess import Popen, PIPE

p = Popen("cmd.exe", stdin=PIPE, stdout=PIPE, stderr=PIPE) #打开一个cmd.exe

output,err = p.communicate('dir\n') #输入dir命令,同时捕获输出

print output

print err

communicate接收一个参数,作为输入。返回两个值,分别是stdout和stderr的内容。

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航