By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
440,454 Members | 1,803 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 440,454 IT Pros & Developers. It's quick & easy.

Enter parameters into Fortran executable from python cgi script

P: n/a
I have a fortran executable which when run from cmd it asks for a
series of parameters which you enter then hit enter.
From my python cgi script i want to be able to run the executable.
Enter the 4 or 5 parameters needed then end the executable and
redirect to another web page which will display some results given
from an output file from the fortran executable.

When the user clicks submit on the form it seems to hang up on the
interaction between python cgi and fortran exe. In this example the
fortran exe only accepts on variable then terminates.

How do i do this correctly?
testrun3 can be accesed from any dir because it's directory is set in
the environment variables.

import os
os.system("testrun3")
os.system("Y")
os.system("exit")
Jul 18 '05 #1
Share this Question
Share on Google+
3 Replies


P: n/a
>>>>> "lamar" == lamar air <la*******@hotmail.com> writes:
lamar> How do i do this correctly? testrun3 can be accesed from
lamar> any dir because it's directory is set in the environment
lamar> variables.

If you want to interact with a program, you need to use popen2 or
popen3, which give you access to the stdin, stdout and stderr
(popen3).

See this thread for a similar discussion and working example:

http://www.google.com/groups?hl=en&l...3D20%26hl%3Den
Note, you could also expose the fortran functions to python directly
with f2py. It is really very easy and automated

http://cens.ioc.ee/projects/f2py2e/
John Hunter

Jul 18 '05 #2

P: n/a
On 11 Jul 2003 07:34:51 -0700, la*******@hotmail.com (lamar_air) wrote:
I have a fortran executable which when run from cmd it asks for a
series of parameters which you enter then hit enter.
From my python cgi script i want to be able to run the executable.
Enter the 4 or 5 parameters needed then end the executable and
redirect to another web page which will display some results given
from an output file from the fortran executable.

When the user clicks submit on the form it seems to hang up on the
interaction between python cgi and fortran exe. In this example the
fortran exe only accepts on variable then terminates.

How do i do this correctly?
testrun3 can be accesed from any dir because it's directory is set in
the environment variables.

import os
os.system("testrun3")
os.system("Y")
os.system("exit")


Using p2test.py in the role of testrun3, which I assume expects a "Y" input
and later an "exit" input (we'll talk about whether you need \n later below),
here is an example using os.popen2 to feed input to child via chin.write and
get output via chout.read:

====< p2test.py >===========================
import sys
first_inp = sys.stdin.readline()
print 'first input was:',`first_inp`
print >>sys.stderr, 'Dummy error message'
second_inp = sys.stdin.readline()
print 'second input was:',`second_inp`
1/0 # sure to make exception
============================================

Interactively:
import os
chin,chout,cherr = os.popen3(r'python c:\pywk\clp\p2test.py')
chin.write('Y\nexit\n')
chin.close()
print chout.read() first input was: 'Y\n'
second input was: 'exit\n'
print cherr.read()

Dummy error message
Traceback (most recent call last):
File "c:\pywk\clp\p2test.py", line 7, in ?
1/0 # sure to make exception
ZeroDivisionError: integer division or modulo by zero

There can be deadlock situations, which you can read about at

http://www.python.org/doc/current/li...w-control.html

but you don't have a lot of data going to the child process, and you are not
having a continuing interchange with it, so there shouldn't be a problem.

As a first attempt, I'd just substitute 'testrun3' for r'python c:\pywk\clp\p2test.py'
in the above and see what you get.

If it doesn't work, you can experiment by removing the \n after the Y and/or the exit,
in case testrun3 is calling some single-character low level input for Y (like getch() in C).

HTH

Regards,
Bengt Richter
Jul 18 '05 #3

P: n/a
lamar_air fed this fish to the penguins on Friday 11 July 2003 07:34 am:

You've had other answers already, but I didn't see an explanation of
why your logic didn't work (not for me, for you).

How do i do this correctly?
testrun3 can be accesed from any dir because it's directory is set in
the environment variables.

import os
os.system("testrun3")
os.system("Y")
os.system("exit")
EACH os.system() call is the equivalent of entering a new command at
the CLI/shell level. There is no linkage from one os.system() call to
the next. Therefore, all application input has to be supplied to the
single invocation.

How difficult would it be to modify the Fortran to read command-line
arguments:

testrun3 Y exit
?

Otherwise, as has been shown by others, you'll need something like
popen2 to create a linkage so you can write the arguments to the
application's stdin.

-- ================================================== ============ <
wl*****@ix.netcom.com | Wulfraed Dennis Lee Bieber KD6MOG <
wu******@dm.net | Bestiaria Support Staff <
================================================== ============ <
Bestiaria Home Page: http://www.beastie.dm.net/ <
Home Page: http://www.dm.net/~wulfraed/ <


Jul 18 '05 #4

This discussion thread is closed

Replies have been disabled for this discussion.