gpt4 book ai didi

python - Twisted lineReceived 没有被调用

转载 作者:太空宇宙 更新时间:2023-11-03 15:48:05 26 4
gpt4 key购买 nike

当我用 python 构建命令行界面时遇到了一个奇怪的行为。这是可以重现该问题的代码的精简版本。

from twisted.internet import reactor, stdio
from twisted.protocols import basic

class CommandLine(basic.LineReceiver):
def __init__(self):
self.linebuf = ''
self.setLineMode()

# why lineReceived doesn't work?
# def lineReceived(self, data):
def dataReceived(self, data):
print 'data received ' + ' '.join([str(ord(c)) for c in data ])
print data


if __name__=='__main__':
stdio.StandardIO(CommandLine())
reactor.run()

上面的代码按预期工作,每次输入一行时都会打印“收到的数据 108 115 115 10”形式的输出。以下是使用 dataReceived 的示例输出:

$ python cmdline.py
hello
data received 104 101 108 108 111 10
hello

^[[A
data received 27 91 65 10

但是,当我在上面的代码中使用 lineReceived 而不是 dataReceived 时,除了命令行本身的回显之外,什么也没有打印出来。使用 lineReceived 的示例输出:

$ python cmdline.py
hello
^[[A

根据 lineReceived 上的文档,当 LineReceiver 在线路模式下接收到线路时,将调用 lineReceived 函数。

现在我正在使用 dataReceived 来使其工作。但我想找出为什么 lineReceived 没有按预期工作。任何提示、建议、建议将不胜感激!

问候。

最佳答案

原因是行delimiter默认情况下设置为 r'\r\n' 的常量(MS Windows 分隔符)。尝试将其设置为“\n”(Linux 和 Mac OS):

class CommandLine(basic.LineReceiver):
delimiter = '\n'

关于python - Twisted lineReceived 没有被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41582595/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com