1. 程式人生 > >python標準庫介紹——36 popen2 模塊詳解

python標準庫介紹——36 popen2 模塊詳解

out tdi move gnu div error python popen pro

==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*
```

  

python標準庫介紹——36 popen2 模塊詳解