popen2

G

Guy

Hi

I was given an exstremly useful answer to a problem that I had in
windows. I'm relativly new with python, but find it exstremly useful.
I'm creating a script to run test files and record output, the script
already works on win32 and I've made a telnet procedure which works
quite well when you want to do the testing on one of the many unix
boxes (but its very slow). What I want to do now is run the script on
a unix system, and later on, create a rsh function to run the tests on
different unix boxes which have not got python on them.

The following snippet of code is what I use on win32. just example
sets some env vars and executes an exe, collects and processes the
output. :

output, input = popen2("cmd.exe")
# Sets the enviroment.
input.write("set LI_DIR=value\n")
input.write("set LI_DIR_ALT=value\n")
input.write("set LI_ARCH=value\n")
input.write("set LI_PRECISION=value\n")
input.write("set LI_PERFORMANCE=value\n")
input.write("set LI_LINKING=\n")
input.write("set LI_ARCHFLAG=\n")
input.write("set LI\n")

# Writes commands to it.
input.write(f_mwtest_exe_str + " " + f_mwtest_args + " " +
os.path.dirname(f_testlwc_str) + " " + f_testlwc_str + "\n")

input.write("exit\n")

while 1:
text = output.readline()
if text:
process text line
else:
break:

The unix equivalant is something like this :

from popen2 import popen2
output, input = popen2("csh")
# Sets the enviroment.
input.write("setenv DISPLAY doors:0.0\n")

input.writeinput.write(f_mwtest_exe_str + " " + f_mwtest_args + " " +
os.path.dirname(f_testlwc_str) + " " + f_testlwc_str + "\n")

print "finished"
process the output from the test file.


The problem is at the moment I can't get the process to stop and wait
until the exe has finished executing, the python script executes
everything and then the test file is executed afterwards. I'm thinking
that there must be a switch on the csh or sh command to stop this
happening but I don't know what it is. The unix machines that I'm
working on are all different plat types, so the platform type proberly
won't help you.

NOTE the commands above will be a lot more varied, and are not just
used to set the enviroment up.

Any help would be of great value to me
TIA

Guy
 
D

Donn Cave

The unix equivalant is something like this :

from popen2 import popen2
output, input = popen2("csh")
# Sets the enviroment.
input.write("setenv DISPLAY doors:0.0\n")

input.writeinput.write(f_mwtest_exe_str + " " + f_mwtest_args + " " +
os.path.dirname(f_testlwc_str) + " " + f_testlwc_str + "\n")

print "finished"
process the output from the test file.


The problem is at the moment I can't get the process to stop and wait
until the exe has finished executing, the python script executes
everything and then the test file is executed afterwards. I'm thinking
that there must be a switch on the csh or sh command to stop this
happening but I don't know what it is. The unix machines that I'm
working on are all different plat types, so the platform type proberly
won't help you.

Try something like
status = input.close()
result = output.read()
if status is None:
print 'success:', repr(result)
else:
print 'error exit', status, repr(result)

The close() is the important part:

1. flush your buffer so data actually goes to the shell
2. closes the shell's input so it doesn't stay around
waiting for more.
3. returns exit status for the shell process, or None
if the exit status is 0. (This won't work so well
for rsh.)

While I'm at it, I would recommend that you use "sh" instead
of "csh", because in the end it will give you less grief with
bugs and misfeatures. "setenv x v" -> "x=v export x" if you
do this. I would also recommend popen2("sh 2>&1") so that
the piped output includes error/diagnostic output.

Donn Cave, (e-mail address removed)
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,582
Members
45,067
Latest member
HunterTere

Latest Threads

Top