`returncode` is always None.

Issue #29 resolved
pahaz NA created an issue

Hi, I find new problem. Try running this code:

from sarge import Feeder, run, Capture

# import logging
# from sarge import logger
# l = logger
# l.setLevel(logging.DEBUG)
# l.addHandler(logging.StreamHandler())

feeder = Feeder()
cin = Capture(buffer_size=1)
cout = Capture(buffer_size=1)
pipe = run('cat | python -c "while 1: import time; input(); time.sleep(0.5); z = locals().setdefault(\'z\', 1); print(z); z += 1"', input=feeder, stdout=cin, stderr=cout, async=True)
pipe.wait_events()

feeder.feed('Hello\n')
feeder.feed(b'Goodbye\n')
feeder.feed('Good!bye\n')
feeder.feed(b'Goodbye\n')
feeder.close()

while pipe.returncode is None:
    # print(cin._done, cout._done, [x.poll() for x in pipe.processes])
    for msg in pipe.stdout:
        print(msg)
    for msg in pipe.stderr:
        print('e!:' + msg)

print(pipe.stdout.text, pipe.stderr.text)

This code will work infinitely. The reson of this is returncode property organization. I forgot about poll().

I thin need add .poll() to Pipline class, and use while pipleine.poll() in None: in docs. What do you think about this?

Comments (4)

  1. Log in to comment