Re: [Twisted-Python] processProtocol woes and a plea for aid

At 01:34 PM 6/23/04 -0400, Gary Coulbourne wrote:
Howdy!
I'm using processProtocol to talk to a program written by a coworker. It handles things fine, but it is asynchronous in that when I send a response to it, it may send several responses back, or it may just randomly send back a response. If I were handling this output a line at a time, it would be fine, but processProtocol seems to put all of the responses together... each response is followed by a \n. I naively assumed that each time a line was complete, Twisted would call my outRecieved. It seems, though, that dozens of respopnses can build up in the buffer before it was called.
I'm certain I am missing out on something basic. Is there any way to set processProtocol to look at the \n as a signal to call outRecieved rather than to call it at some arbitrary time? I didn't see anything quickly obvious in the source, so I thought I would ask for advice.
It sounds like maybe the program you're calling isn't flushing its writes to stdout. If it doesn't, there's no way for Twisted to see its output until the program's output buffer overflows. One quick way to check: are you always getting the messages in blocks of roughly N bytes, (except perhaps for the last block before the program exits)? If so, you need to get your coworker to flush his output buffer. Alternatively, depending on your platform, creating a pty (aka pseudoterminal) may be an option. This would be to convince your co-worker's program that it's talking to a console, and therefore should output data as it becomes available instead of buffering it. But that depends somewhat on the language/libraries being used by the program.
participants (1)
-
Phillip J. Eby