当前位置:   article > 正文

python中的subprocess库_subprocess库详解

python subprocess详解

subprocess库详解

2018-03-16T07:14:03

1794

0

0

#### subprocess模块允许你产生新的进程,连接到他们的输入/输出/错误管道,并获得他们的返回代码。

#### 它是以下几个原有模块的整合和优化:

#### os.system

#### os.spawn*

#### os.popen*

#### popen2.*

#### commands.*

## call

目前,subprocess模块是一种推荐的方式用于启动一个子进程。

首先,我们来了解一下最基本的命令`call`。

```python

subprocess.call(args, stdin=None, stdout=None, stderr=None, shell=False)

```

示例:

```python

subprocess.call(["ls", "-lrt"])

```

该命令会执行`ls -lrt`命令,同时返回运行结果码。当返回0时表示运行成功。

## Popen

下面,我们来详细了解一下Popen函数的使用。

Popen函数的调用方式类似于call,但是对输入、输出、错误输出的管理和查询能力更强。

```python

subprocess.Popen(args, stdin=None, stdout=None, stderr=None, shell=False, cwd="")

```

- shell默认为False,当shell为False时,args需要传入的数组形式的命令;而当shell为True时,args需要传入的则为shell字符串。

- cwd可以指定工作目录,默认为当前目录。

- stdout和stderr可以设置为subprocess.PIPE,从而可以读取输出信息和异常信息。

下面,我们通过几个简单的Case来更加具体的了解一下subprocess模块的使用。

假设我们在`/home/nianshi`目录下有两个文件:

`test1.py`:

```python

print "nianshi0912"

```

`test2.py`:

```python

print nianshi0912

```

很明显,启动`test1.py`是一个可以正常执行的文件,而`test2.py`则存在语言错误,无法正常执行。

下面,我们来使用subprocess.Popen函数来分别运行一下这两个文件:

```python

import subprocess

obj = subprocess.Popen("python test1.py", shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, cwd="/home/nianshi")

return_code = obj.wait()

print return_code

# 0

print a.stdout.read()

# nianshi0912

print a.stderr.read()

#

```

其中,我们可以看到我们在subprocess.Popen函数中指定了运行代码的文件,并指定了代码运行目录,同时设置了输出和异常输出。

然后,通过调用wait()函数等到命令执行完成并获取到了返回值。

其中,返回值0表示运行成功,返回值1表示运行失败。

接下来,我们可以通过stdout.read()来读取运行过程中打印的信息。

也可以通过stderr.read()来读取运行过程中打印的错误信息。

下面,我们来运行一段会产生错误的代码来实践一下吧:

```python

import subprocess

obj = subprocess.Popen("python test2.py", shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, cwd="/home/nianshi")

return_code = obj.wait()

print return_code

# 1

print a.stdout.read()

# nianshi0912

print a.stderr.read()

# Traceback (most recent call last):

# File "test2.py", line 1, in # print nianshi0912

# NameError: name 'nianshi0912' is not defined

```

0条评论

评论前请先登录

登录

注册

发表回复

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/548416
推荐阅读
相关标签
  

闽ICP备14008679号