popen help
Jason Zheng
jzheng at jpl.nasa.gov
Fri Nov 12 15:59:04 EST 2004
Jason Zheng wrote:
> exarkun at intarweb.us wrote:
>
>> On Fri, 12 Nov 2004 11:29:46 -0800, Jason Zheng <jzheng at jpl.nasa.gov>
>> wrote:
>>
>>> I'm trying to open a subshell to run some csh commands, and I want to
>>> connect the stdout of the subshell to the main stdout:
>>>
>>> sub = Popen4('csh -f')
>>> sub.tochild.write('source source.me\n')
>>> sub.tochild.write('runthis\n')
>>> sub.tochild.close()
>>>
>>> for x in sub.fromchild.readlines():
>>> print x
>>>
>>
>>
>>>>> import os, time
>>>>> for x in iter(os.popen('for x in `seq 3`; do echo $x; sleep 1;
>>>>> done').readline, ''):
>>
>>
>> ... print time.time(), x,
>> ... 1100290304.55 1
>> 1100290305.56 2
>> 1100290306.56 3
>>
>> The difference is that readline() returns one line whereas
>> readlines() returns all of the lines. Since you cannot know what all
>> the lines are until you have read all of the data, it cannot return
>> until the child process exits.
>>
>> Jp
>
> Jp,
>
> I doubt that's gonna resolve the problem I have tho. Suppose I send one
> command which doesn't not have the 'sleep' but prints some output line
> periodically, wouldn't I have to wait till the end of the execution to
> see any output?
>
> Can I just connect sys.stdout to the stdout of the subshell?
>
> jz
Nevermind, I think I understand now... I thought that the close() call
was blocking executation. Thanks!
More information about the Python-list
mailing list