Python论坛  - 讨论区

标题:[python-chinese] windows下调用标准输入输出的方法是怎样的?

2005年11月09日 星期三 11:38

马踏飞燕 honeyday.mj at gmail.com
Wed Nov 9 11:38:01 HKT 2005

最近学习twisted的时候遇到一个问题,书里面给的例子运行在linux下面,通过fcntl来封装了一个stdio,这段代码在windows下面不能运行。
但是,书里面提到了可以用其他的有write的包来代替,不知道windows下面有没有相应的包呢?
我曾尝试将结果写道文件中,但是没有成功。
该代码在Twisted Network Programming Essentials的第二章第三节的example2-6。

下面附上程序:

from twisted.internet import stdio, reactor, protocol

from twisted.protocols import basic

import re



class DataForwardingProtocol(protocol.Protocol):

    def _ _init_ _(self):

        self.output = None

        self.normalizeNewlines = False



    def dataReceived(self, data):

        if self.normalizeNewlines:

            data = re.sub(r"(\r\n|\n)", "\r\n", data)

        if self.output:

            self.output.write(data)



class StdioProxyProtocol(DataForwardingProtocol):

    def connectionMade(self):

        inputForwarder = DataForwardingProtocol( )

        inputForwarder.output = self.transport

        inputForwarder.normalizeNewlines = True

        stdioWrapper = stdio.StandardIO(inputForwarder)

        self.output = stdioWrapper

        print "Connected to server.  Press ctrl-C to close connection."



class StdioProxyFactory(protocol.ClientFactory):

    protocol = StdioProxyProtocol



    def clientConnectionLost(self, transport, reason):

        reactor.stop( )



    def clientConnectionFailed(self, transport, reason):

        print reason.getErrorMessage( )

        reactor.stop( )



if __name__ == '_ _main_ _':

    import sys

    if not len(sys.argv) == 3:

        print "Usage: %s host port" % _ _file_ _

        sys.exit(1)



    reactor.connectTCP(sys.argv[1], int(sys.argv[2]), StdioProxyFactory( ))

    reactor.run( )

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2005年11月09日 星期三 12:08

ygao ygao2004 at gmail.com
Wed Nov 9 12:08:28 HKT 2005

sys.stdout对象有write方法。

On 11/9/05, 马踏飞燕 <honeyday.mj at gmail.com> wrote:
> 最近学习twisted的时候遇到一个问题,书里面给的例子运行在linux下面,通过fcntl来封装了一个stdio,这段代码在windows下面不能运行。
> 但是,书里面提到了可以用其他的有write的包来代替,不知道windows下面有没有相应的包呢?
> 我曾尝试将结果写道文件中,但是没有成功。
> 该代码在Twisted Network Programming Essentials的第二章第三节的example2-6。
>
> 下面附上程序:
>
> from twisted.internet import stdio, reactor, protocol
>
> from twisted.protocols import basic
>
> import re
>
>
>
> class DataForwardingProtocol(protocol.Protocol):
>
>    def _ _init_ _(self):
>
>        self.output = None
>
>        self.normalizeNewlines = False
>
>
>
>    def dataReceived(self, data):
>
>        if self.normalizeNewlines:
>
>            data = re.sub(r"(\r\n|\n)", "\r\n", data)
>
>        if self.output:
>
>            self.output.write(data)
>
>
>
> class StdioProxyProtocol(DataForwardingProtocol):
>
>    def connectionMade(self):
>
>        inputForwarder = DataForwardingProtocol( )
>
>        inputForwarder.output = self.transport
>
>        inputForwarder.normalizeNewlines = True
>
>        stdioWrapper = stdio.StandardIO(inputForwarder)
>
>        self.output = stdioWrapper
>
>        print "Connected to server.  Press ctrl-C to close connection."
>
>
>
> class StdioProxyFactory(protocol.ClientFactory):
>
>    protocol = StdioProxyProtocol
>
>
>
>    def clientConnectionLost(self, transport, reason):
>
>        reactor.stop( )
>
>
>
>    def clientConnectionFailed(self, transport, reason):
>
>        print reason.getErrorMessage( )
>
>        reactor.stop( )
>
>
>
> if __name__ == '_ _main_ _':
>
>    import sys
>
>    if not len(sys.argv) == 3:
>
>        print "Usage: %s host port" % _ _file_ _
>
>        sys.exit(1)
>
>
>
>    reactor.connectTCP(sys.argv[1], int(sys.argv[2]), StdioProxyFactory( ))
>
>    reactor.run( )
>
> _______________________________________________
> Python中文技术讨论邮件列表
> 发言: 发邮件到 python-chinese at lists.python.cn
> 订阅: 发送 subscribe 到 python-chinese-request at lists.python.cn
> 退订: 发送 unsubscribe 到  python-chinese-request at lists.python.cn
> 详细说明: http://python.cn/mailman/listinfo/python-chinese
>
>


--
■■■■■■■■■■■■■■■■■■■■■
Myblog: http://blog.donews.com/ygao/
自建的python学习论坛:
http://groups.google.com/group/python_study
■■■■■■■■■■■■■■■■■■■■■

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2005年11月09日 星期三 12:55

nEO (a.k.a. gentoo.cn) gentoo.cn at gmail.com
Wed Nov 9 12:55:55 HKT 2005

在 05-11-9,马踏飞燕<honeyday.mj at gmail.com> 写道:
> 但是,书里面提到了可以用其他的有write的包来代替,不知道windows下面有没有相应的包呢?
import sys
sys.stdout.write('Test,test\n')
sys.stderr.write('Test stderr, stderr\n')

--
I'm the one, powered by nEO

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

如下红色区域有误,请重新填写。

    你的回复:

    请 登录 后回复。还没有在Zeuux哲思注册吗?现在 注册 !

    Zeuux © 2025

    京ICP备05028076号