"peterff66" <peterf...@yahoo.com> wrote in message
news:ivo9or+j...@egroups.com...
Hello Python community,
I am working on a project that retrieves data from remote Sybase. I have
to use isql and subprocess to do this. Is the following correct?
1. call subprocess.popn to run isql, connect to Sybase
2. run sql ("select ...from ...")
3. write retrieved data to subprocess.pipe
4. retrieve data from pipe
Did anybody do similar work before? Any ideas (or code piece) to share?
I did something vaguely similar a while ago. I don't know how helpful this
will be, but it may give you some ideas.
Firstly, these are the main differences between your scenario and mine -
1. I was using 'osql' to connect to MS SQL Server.
2. I used os.popen4, not subprocess. Hopefully you can follow the guidelines
in the manual to translate to subprocess.
3. In my case, I built up a long command to create and populate various
database tables using StringIO, passed the string to popen4.stdout, and then
read popen4.stdin and displayed it on the screen to read any output.
4. On looking at my code, I see that I started a sub-thread to read
popen4.stdin. I can't remember why I did that, but it may have been
something to do with getting the output in realtime instead of waiting for
the command to finish executing.
Here is the code that I used -
import os
import threading
from cStringIO import StringIO
def read_stdout(stdout):
while True:
line = stdout.readline()
if not line:
break
print line
os.environ['OSQLPASSWORD'] = pwd
sql_stdin, sql_stdout = os.popen4('osql -U %s -d %s -n' % (user,
database))
s = StringIO()
[call function to build up commands]
threading.Thread(target=read_stdout, args=(sql_stdout,)).start()
s.seek(0)
sql_stdin.writelines(s.readlines())
s.close()
sql_stdin.close()
HTH
Frank Millman
--
http://mail.python.org/mailman/listinfo/python-list