Newbie's unsurmountable pb with IO stream trick

Spendius spendius at muchomail.com
Mon Sep 2 10:33:09 EDT 2002


I'm about to give up learning Python because I've met
insurmountable problems. I'm a newbie just having begun
teaching myself this language a few days ago, and I 
already stall against unsolvable (at least to me) issues:
so could you please help me and *show me* I'd be wrong
giving up ?

I tried to rewrite something I wrote in Java, trying to
communicate with an OS process (SQL*Plus in this occurence),
but big time bucked against
- the lack of methods of the so-called 'file objects' (if
  there was an equivalent to java.io.InputStream.available() !)
- the fact you don't declare variables: you just assign
  values to them => I immediately hit against the 'global'
  keyword issue (rather a global mess) and gave up...

For those who know SQL*Plus y'all know you get a prompt:
"SQL> " 
(remove the "'s to get the string) and then this frontend
Oracle software waits for your input. This is somewhat tricky 
to deal with, but in Java I managed to find a solution [because
your InputStream blocks, which makes your program hang if
you don't address this 'waiting prompt' problem] thanks to
a sub-thread that tries to read the InputStream every time
I detect that the method available() returns 0 (zero): if
the next character in my stream is easily readable -if it
doesn't block- I return it, if it blocks OK I know I've
reached the final 5 characters 'S', 'Q', 'L', '>', ' ' and
that I'll never get the following one, so I return -1 (EOF
in Java).

So I have a challenge for you guys who are enough acquainted
with Python: how could I perform the same with this language ?

Thanks ever so much to y'all...

          ____________________
         (                    )
         (   operating syst.  )
         (    ___________     )
         (   / SQL*Plus  \    )
         (   \__process__/    )
         (    î        |      )
         (____|________|______)
              |        |
              |        |
              |        |
              |       \|/
              |      output str. --->--> sent to a tcl window (for ex.)
            input      ('InputStream' in Java -sic !-)
           stream
       (called 'OutputStream'
          in Java !!)
             
Send "select sysdate from dual;" to the input stream & you'll get
the output stream string (remove the "'s):
"\n"
"SYSDATE\n"
"---------\n"
"02-SEP-02\n"
"\n"
"SQL> "



More information about the Python-list mailing list