Enter parameters into Fortran executable from python cgi script

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • lamar_air

    Enter parameters into Fortran executable from python cgi script

    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("test run3")
    os.system("Y")
    os.system("exit ")
  • John Hunter

    #2
    Re: Enter parameters into Fortran executable from python cgi script

    >>>>> "lamar" == lamar air <lamar_air@hotm ail.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:




    Note, you could also expose the fortran functions to python directly
    with f2py. It is really very easy and automated




    John Hunter

    Comment

    • Bengt Richter

      #3
      Re: Enter parameters into Fortran executable from python cgi script

      On 11 Jul 2003 07:34:51 -0700, lamar_air@hotma il.com (lamar_air) wrote:
      [color=blue]
      >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("tes trun3")
      >os.system("Y ")
      >os.system("exi t")[/color]

      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.readl ine()
      print 'first input was:',`first_in p`
      print >>sys.stderr, 'Dummy error message'
      second_inp = sys.stdin.readl ine()
      print 'second input was:',`second_i np`
      1/0 # sure to make exception
      =============== =============== ==============

      Interactively:
      [color=blue][color=green][color=darkred]
      >>> import os
      >>> chin,chout,cher r = os.popen3(r'pyt hon c:\pywk\clp\p2t est.py')
      >>> chin.write('Y\n exit\n')
      >>> chin.close()
      >>> print chout.read()[/color][/color][/color]
      first input was: 'Y\n'
      second input was: 'exit\n'
      [color=blue][color=green][color=darkred]
      >>> print cherr.read()[/color][/color][/color]
      Dummy error message
      Traceback (most recent call last):
      File "c:\pywk\clp\p2 test.py", line 7, in ?
      1/0 # sure to make exception
      ZeroDivisionErr or: integer division or modulo by zero

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



      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\p2t est.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

      Comment

      • Dennis Lee Bieber

        #4
        Re: Enter parameters into Fortran executable from python cgi script

        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).

        [color=blue]
        > 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("test run3")
        > os.system("Y")
        > os.system("exit ")[/color]

        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.

        --[color=blue]
        > =============== =============== =============== =============== == <
        > wlfraed@ix.netc om.com | Wulfraed Dennis Lee Bieber KD6MOG <
        > wulfraed@dm.net | Bestiaria Support Staff <
        > =============== =============== =============== =============== == <
        > Bestiaria Home Page: http://www.beastie.dm.net/ <
        > Home Page: http://www.dm.net/~wulfraed/ <[/color]

        Comment

        Working...