调用系统命令

1、简单的调用

1.1 os.system

import os
os.system('dir')

dir产生的屏显将直接出现在当前的屏幕上。
返回值和执行环境有关。如果是windows的cmd.exe环境,返回值是状态码。0代表成功,1代表失败。比如,如果不小心敲错了,把dir写成了ddir,那么由于找不到这条命令,返回码会是1。

1.2 subprocess.call

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

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

1.3 subprocess.Popen

import 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的内容。

转载于:https://www.cnblogs.com/iszero/p/3843008.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值