python子进程进行kinit认证_python子进程模块subprocess详解

subprocess--子进程管理器

一、subprocess 模块简介

subprocess最早是在2.4版本中引入的。

subprocess模块用来生成子进程,并可以通过管道连接它们的输入/输出/错误,以及获得它们的返回值。

它用来代替多个旧模块和函数:

os.system

os.spawn*

os.popen*

popen2.*

commands.*

关于这个模块可以取代的旧函数可以参见 subprocess-replacements 一节。

POSIX用户(Linux, BSD, etc)还可以安装和使用更新的subprocess32模块来代替python 2.7版本中的subprocess.

subprocess32虽然是一个低版本,但在有些情况下效果更好。

1.1. 使用 subprocess模块

启动子进程的推荐方式是使用下面的便利功能。

当这些还不能满足需求时,就需要使用底层的Popen接口。

1. subprocess.call

语法:

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

语义:

运行由args指定的命令,直到命令结束后,返回 返回码的属性值。

上面的参数是最常见的方式,下面是示例代码:

>>>

>>> subprocess.call(["ls", "-l"])

0

>>> subprocess.call("exit 1", shell=True)

1

WARNING: 使用 shell=True 是一种安全保护机制。

NOTE: 在使用这个函数时,不要使用 stdout=PIPE 或 stderr=PIPE 参数,

不然会导致子进程输出的死锁。

如果要使用管道,可以在 communicate()方法中使用Popen

示例代码:

import subprocess

rc = subprocess.call(["ls","-l"])

可以通过一个shell来解释一整个字符串:

import subprocess

out = subprocess.call("ls -l", shell=True)

out = subprocess.call("cd ..", shell=True)

使用了shell=True这个参数。

这个时候,我们使用一整个字符串,而不是一个表来运行子进程。

Python将先运行一个shell,再用这个shell来解释这整个字符串。

shell命令中有一些是shell的内建命令,这些命令必须通过shell运行,$cd。

shell=True允许我们运行这样一些命令。

2. subprocess.check_call

语法:

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

语义:

运行由args指定的命令,直到命令执行完成。

如果返回码为零,则返回。否则,抛出 CalledProcessError异常。

CalledProcessError对象包含有返回码的属性值。

上面显示的参数仅仅是最常见的,下面是用户更常用的参数。

示例代码如下:

>>>

>>> subprocess.check_call(["ls", "-l"])

0

>>> subprocess.check_call("exit 1", shell=True)

Traceback (most recent

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值