非常教程

Python参考手册

联网 | Networking

popen2

自2.6版弃用:此模块已过时。使用该subprocess模块。特别检查用子流程模块部分替换旧功能。

这个模块允许你产生进程并连接到它们的输入/输出/错误管道,并在Unix和Windows下获得它们的返回代码。

subprocess模块提供了更强大的功能,用于产生新过程并检索其结果。使用subprocess模块比使用模块更可取popen2

这个模块提供的主要接口是三个工厂功能。对于其中的每一个,如果指定了bufsize,它将指定I / O管道的缓冲区大小。模式,如果提供,应该是字符串'b''t'; 在Windows上,需要确定文件对象是否应以二进制或文本模式打开。模式的默认值是't'

在Unix上,cmd可能是一个序列,在这种情况下,参数将直接传递给程序,而无需shell干预(如同os.spawnv())。如果cmd是一个字符串,它将被传递给shell(与之一样os.system())。

检索子进程的返回码的唯一方法是使用poll()or 和classes wait()上的方法; 这些只在Unix上可用。在模块中使用,和功能或等效功能时,此信息不可用。(请注意,模块函数返回的元组与模块返回的元组顺序不同。)Popen3Popen4popen2()popen3()popen4()osospopen2

popen2.popen2(cmd[, bufsize[, mode]])

执行cmd作为子进程。返回文件对象(child_stdout, child_stdin)

popen2.popen3(cmd[, bufsize[, mode]])

执行cmd作为子进程。返回文件对象(child_stdout, child_stdin, child_stderr)

popen2.popen4(cmd[, bufsize[, mode]])

执行cmd作为子进程。返回文件对象(child_stdout_and_stderr, child_stdin)

2.0版本中的新功能。

在Unix上,定义由工厂函数返回的对象的类也是可用的。这些不用于Windows实现,并且不适用于该平台。

class popen2.Popen3(cmd[, capturestderr[, bufsize]])

这个类代表一个子进程。通常情况下,Popen3实例使用所创建的popen2()popen3()上述库功能。

如果不使用其中一个辅助函数创建Popen3对象,则参数cmd是在子进程中执行的shell命令。该capturestderr标志,如果为true,指定对象应该捕获子进程的标准错误输出。默认值是false。如果指定了bufsize参数,它将指定子进程的I / O缓冲区的大小。

class popen2.Popen4(cmd[, bufsize])

Popen3标准输出相似,但始终将标准错误捕获到同一个文件对象中。这些通常是使用创建的popen4()

2.0版本中的新功能。

1. Popen3和Popen4对象

Popen3Popen4类的实例具有以下方法:

Popen3.poll()

-1如果子进程尚未完成,则返回,否则返回状态码(请参阅wait())。

Popen3.wait()

等待并返回子进程的状态码。状态码对进程的返回码和有关它是使用exit()系统调用退出还是因信号而死亡的信息进行编码。帮助解释状态码的功能在os模块中定义; 请参阅W*()功能族的过程管理部分。

以下属性也可用:

Popen3.fromchild

提供子进程输出的文件对象。对于Popen4情况下,这将同时提供标准输出和标准错误流。

Popen3.tochild

为子进程提供输入的文件对象。

Popen3.childerr

如果capturestderr对构造函数为true ,则提供来自子进程的错误输出的文件对象,否则None。这将始终是NonePopen4实例。

Popen3.pid

子进程的进程ID。

2.流量控制问题

无论何时您正在进行任何形式的进程间通信,都需要仔细考虑控制流程。这个模块(或os模块等价物)提供的文件对象仍然是这种情况。

当从父进程读取子进程的标准输出时,读取从标准错误写入大量数据的子进程的输出时,可能会发生死锁。读取和写入的其他组合可能会出现类似的情况。基本因素是,_PC_PIPE_BUF一个进程以阻塞的方式正在写入多于一个字节,而另一个进程正在从第一个进程读取,也是以阻塞的方式进行读取。

有几种方法可以处理这种情况。

在很多情况下,最简单的应用程序更改将在父进程中遵循此模型:

import popen2

r, w, e = popen2.popen3('python slave.py')
e.readlines()
r.readlines()
r.close()
e.close()
w.close()

在子类中使用这样的代码:

import os
import sys

# note that each of these print statements
# writes a single long string

print >>sys.stderr, 400 * 'this is a test\n'
os.close(sys.stderr.fileno())
print >>sys.stdout, 400 * 'this is another test\n'

尤其要注意,sys.stderr必须在写入所有数据后关闭,否则readlines()不会返回。还要注意os.close()必须使用,因为sys.stderr.close()不会关闭stderr(否则分配sys.stderr将默默关闭它,因此不会打印更多错误)。

需要支持更一般的方法的应用程序应该将I / O与管道上的I / O及其select()循环集成在一起,或者使用单独的线程来读取由使用哪个popen*()功能或Popen*类所提供的每个单独文件。

Python

Python 是一种面向对象的解释型计算机程序设计语言,由荷兰人 Guido van Rossum 于1989年发明,第一个公开发行版发行于1991年。 Python 是纯粹的自由软件, 源代码和解释器 CPython 遵循 GPL 协议。Python 语法简洁清晰,特色之一是强制用空白符( white space )作为语句缩进。

主页 https://www.python.org/
源码 https://github.com/python/cpython
版本 2.7
发布版本 2.7.13

Python目录

1.内置常量 | Built-in Constants
2.内置例外 | Built-in Exceptions
3.内置函数 | Built-in Functions
4.内置类型 | Built-in Types
5.编译器 | Compiler
6.加密 | Cryptography
7.数据压缩 | Data Compression
8.数据持久性 | Data Persistence
9.数据类型 | Data Types
10.调试和分析 | Debugging & Profiling
11.开发工具 | Development Tools
12.文件和目录访问 | File & Directory Access
13.文件格式 | File Formats
14.构架 | Frameworks
15.输入 | Importing
16.输入/输出 | Input/ouput
17.国际化 | Internationalization
18.网络 | Internet
19.网络数据 | Internet Data
20.翻译 | Interpreters
21.语言 | Language
22.记录 | Logging
23.Mac OS
24.MS Windows
25.多媒体 | Multimedia
26.联网 | Networking
27.数字与数学 | Numeric & Mathematical
28.操作系统 | Operating System
29.可选操作系统 | Optional Operating System
30.限制执行 | Restricted Execution
31.运行 | Runtime
32.SGI IRIX
33.软件包装与分销 | Software Packaging & Distribution
34.字符串 | String
35.结构化标记 | Structured Markup
36.Tk
37.Unix
38.Python 简介
39.Python pass 语句
40.Python 循环嵌套
41.Python 运算符
42.Python log10() 函数
43.Python log() 函数
44.Python floor() 函数
45.Python fabs() 函数
46.Python exp() 函数
47.Python cmp() 函数
48.Python ceil() 函数
49.Python abs() 函数
50.Python Number(数字)
51.Python pow() 函数
52.Python modf() 函数
53.Python min() 函数
54.Python max() 函数
55.Python asin() 函数
56.Python acos() 函数
57.Python uniform() 函数
58.Python shuffle() 函数
59.Python seed() 函数
60.Python random() 函数
61.Python randrange() 函数
62.Python choice() 函数
63.Python sqrt() 函数
64.Python round() 函数
65.Python radians() 函数
66.Python degrees() 函数
67.Python tan() 函数
68.Python sin() 函数
69.Python hypot() 函数
70.Python cos() 函数
71.Python atan2() 函数
72.Python atan() 函数
73.Python 元组
74.Python 列表(List)
75.Python 字符串
76.Python 字典(Dictionary)
77.Python 日期和时间
78.Python 函数
79.Python 模块
80.Python capitalize()方法
81.Python center()方法
82.Python count() 方法
83.Python expandtabs()方法
84.Python endswith()方法
85.Python encode()方法
86.Python decode()方法
87.Python find()方法
88.Python index()方法
89.Python 异常处理
90.Python isspace()方法
91.Python isnumeric()方法
92.Python islower()方法
93.Python isdigit()方法
94.Python isalpha()方法
95.Python isalnum()方法
96.Python isupper()方法
97.Python istitle()方法
98.Python min()方法
99.Python max()方法
100.Python maketrans()方法