prog1 | prog2 . How not to make prog2 block if not piped?

2006-06-14 Thread riquito
I googled around, but couldn't understand how to solve this problem.
I have 2 scripts

# script1.py #
print 'something'

#script2.py
x=sys.stdin.read()
print 'passed'

if I run
script1.py | script2.py
all goes well.

But if I run just
script2.py
the program blocks waiting forever for input.

On *nix I used select.select to solve this problem, but on windows?
I read that maybe I should use, from win32api, GetStdHandle and
WaitForMultipleObjects, but how to do it it's far from my knowledge.

Any help?

Thank you,
Riccardo

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: prog1 | prog2 . How not to make prog2 block if not piped?

2006-06-14 Thread Maric Michaud
Le Mercredi 14 Juin 2006 17:13, [EMAIL PROTECTED] a écrit :
 # script1.py #
 print 'something'

 #script2.py
 x=sys.stdin.read()
read() will read a file object to the end, i guess you want to use readline() 
instead or the builtin raw_input.

 print 'passed'

 if I run
 script1.py | script2.py
 all goes well.
This is because when script1.py ends, it will send an 'EOF' char to 
script2.py, wich terminate the read method.


 But if I run just
 script2.py
 the program blocks waiting forever for input.
here, newlines ('\n'), doesn't terminate the read call, you can stop the read 
by typing ctrl+d at the beginnning of a new line in a normal unix terminal.


-- 
_

Maric Michaud
_

Aristote - www.aristote.info
3 place des tapis
69004 Lyon
Tel: +33 426 880 097
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: prog1 | prog2 . How not to make prog2 block if not piped?

2006-06-14 Thread imcs ee
do u really need read something even when you run the scripts2.py directly?
why not just change script2.py to
 #script2.py
if __name__ == __main__:
x=sys.stdin.read()
print 'passed'
else:
print 'passed from else branch'

is it what  you want? or anything i misunderstand.

On 14 Jun 2006 08:13:04 -0700, [EMAIL PROTECTED] [EMAIL PROTECTED] wrote:
 I googled around, but couldn't understand how to solve this problem.
 I have 2 scripts

 # script1.py #
 print 'something'

 #script2.py
 x=sys.stdin.read()
 print 'passed'

 if I run
 script1.py | script2.py
 all goes well.

 But if I run just
 script2.py
 the program blocks waiting forever for input.

 On *nix I used select.select to solve this problem, but on windows?
 I read that maybe I should use, from win32api, GetStdHandle and
 WaitForMultipleObjects, but how to do it it's far from my knowledge.

 Any help?

 Thank you,
 Riccardo

 --
 http://mail.python.org/mailman/listinfo/python-list

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: prog1 | prog2 . How not to make prog2 block if not piped?

2006-06-14 Thread riquito

imcs ee ha scritto:

 do u really need read something even when you run the scripts2.py directly?
 why not just change script2.py to
  #script2.py
 if __name__ == __main__:
 x=sys.stdin.read()
 print 'passed'
 else:
 print 'passed from else branch'

 is it what  you want? or anything i misunderstand.

it won't do. clever btw.
Script2 is not a module, it's a program that _could_ receive input via
pipe.

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: prog1 | prog2 . How not to make prog2 block if not piped?

2006-06-14 Thread imcs ee
yeah, forget my post ,it;s useless.
sorry for my thoughtless
On 14 Jun 2006 10:40:15 -0700, [EMAIL PROTECTED] [EMAIL PROTECTED] wrote:

 imcs ee ha scritto:

  do u really need read something even when you run the scripts2.py directly?
  why not just change script2.py to
   #script2.py
  if __name__ == __main__:
  x=sys.stdin.read()
  print 'passed'
  else:
  print 'passed from else branch'
 
  is it what  you want? or anything i misunderstand.

 it won't do. clever btw.
 Script2 is not a module, it's a program that _could_ receive input via
 pipe.

 --
 http://mail.python.org/mailman/listinfo/python-list

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: prog1 | prog2 . How not to make prog2 block if not piped?

2006-06-14 Thread Steve Holden
imcs ee wrote:
 yeah, forget my post ,it;s useless.
 sorry for my thoughtless
 On 14 Jun 2006 10:40:15 -0700, [EMAIL PROTECTED] [EMAIL PROTECTED] wrote:
 
imcs ee ha scritto:


do u really need read something even when you run the scripts2.py directly?
why not just change script2.py to
 #script2.py
if __name__ == __main__:
x=sys.stdin.read()
print 'passed'
else:
print 'passed from else branch'

is it what  you want? or anything i misunderstand.

it won't do. clever btw.
Script2 is not a module, it's a program that _could_ receive input via
pipe.

It really doesn't matter *how* it receives input, whether from a pipe, 
or a terminal or a redirected file.

When you run it standalone you should give it some input - type some 
text then enter ^D (on Unix-like systems) or ^Z (on Windows). How else 
do you expect read() to return anything? It *has* to read to the end fo 
the file before it returns a value.

regards
  Steve
-- 
Steve Holden   +44 150 684 7255  +1 800 494 3119
Holden Web LLC/Ltd  http://www.holdenweb.com
Love me, love my blog  http://holdenweb.blogspot.com
Recent Ramblings http://del.icio.us/steve.holden

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: prog1 | prog2 . How not to make prog2 block if not piped?

2006-06-14 Thread riquito

Steve Holden ha scritto:

 When you run it standalone you should give it some input - type some
 text then enter ^D (on Unix-like systems) or ^Z (on Windows). How else
 do you expect read() to return anything? It *has* to read to the end fo
 the file before it returns a value.

 regards
   Steve

you've got reason.
I must read my command line options, if then there is still text I use
that, otherwise I read from stdin. If nothing was piped, the user must
complete the work.

Thank you all,
Riccardo

-- 
http://mail.python.org/mailman/listinfo/python-list