python标准库介绍——36 popen2 模块详解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
==popen2 模块==
 
 
``popen2`` 模块允许你执行外部命令, 并通过流来分别访问它的 ``stdin`` 和 ``stdout`` ( 可能还有 ``stderr`` ).
 
在 python 1.5.2 以及之前版本, 该模块只存在于 Unix 平台上. 2.0 后, Windows 下也实现了该函数.
[Example 3-9 #eg-3-9] 展示了如何使用该模块来给字符串排序.
 
====Example 3-9. 使用 popen2 模块对字符串排序Module to Sort Strings====[eg-3-9]
 
```
File: popen2-example-1.py
 
import popen2, string
 
fin, fout = popen2.popen2("sort")
 
fout.write("foo\n")
fout.write("bar\n")
fout.close()
 
print fin.readline(),
print fin.readline(),
fin.close()
 
*B*bar
foo*b*
```
 
[Example 3-10 #eg-3-10] 展示了如何使用该模块控制应用程序 .
 
====Example 3-10. 使用 popen2 模块控制 gnuchess====[eg-3-10]
 
```
File: popen2-example-2.py
 
import popen2
import string
 
class Chess:
    "Interface class for chesstool-compatible programs"
 
    def _ _init_ _(self, engine = "gnuchessc"):
        self.fin, self.fout = popen2.popen2(engine)
        s = self.fin.readline()
        if s != "Chess\n":
            raise IOError, "incompatible chess program"
 
    def move(self, move):
        self.fout.write(move + "\n")
        self.fout.flush()
        my = self.fin.readline()
        if my == "Illegal move":
            raise ValueError, "illegal move"
        his = self.fin.readline()
        return string.split(his)[2]
 
    def quit(self):
        self.fout.write("quit\n")
        self.fout.flush()
 
#
# play a few moves
 
g = Chess()
 
print g.move("a2a4")
print g.move("b2b3")
 
g.quit()
 
*B*b8c6
e7e5*b*
```

  

posted @   淋哥  阅读(1878)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
点击右上角即可分享
微信分享提示