Running Python scripts from BASH

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

    #1

    Running Python scripts from BASH

    I'm using Python to automate testing software for my company. I
    wanted the computers in my testing lab to automatically fetch the
    latest version of the python scripts from a CVS repository and then
    ask a local database server which of the scripts to run.

    I built the following:

    #!/bin/bash
    # Batcher will run the specified scripts.

    cvs update

    while true
    do
    # This part makes sure that
    # every hour or so, we get the latest
    # snapshot of the suite from CVS.
    if [ $(date +%M) = 0 ]; then
    cvs update
    sleep 360
    fi
    # Then we grab the name of
    # a randomly-selected script
    i=$(python randomRun.py)
    # If the return-value of randomRun.py
    #is empty, we don't run it.
    if ["$i"=""]; then
    echo Not running anything
    sleep 3600
    # If randomRun doesn't return
    # empty, we run the script that it prints.
    else
    python "$i";
    sleep 2
    fi
    done


    --------- END BASH FILE --------

    For debugging purposes, you can just build "randomRun. py" to do the
    following:

    print "randomRun. py"

    It's silly but works.

    Whenever I run this script, Python decides that it doesn't like the
    way BASH feeds it the name of the script. I get the following
    message:

    ': [Errno 22] Invalid argumentopen file 'foo.py

    I dunno. Maybe this is a better question for a BASH-related group.
    How do I get around this?

  • Ishpeck

    #2
    Re: Running Python scripts from BASH

    It may be worth noting that I'm running Cygwin on WindowsXP
    professional.

    Comment

    • Ben Finney

      #3
      Re: Running Python scripts from BASH

      "Ishpeck" <ishpeck@gmail. comwrites:
      I'm using Python to automate testing software for my company. I
      wanted the computers in my testing lab to automatically fetch the
      latest version of the python scripts from a CVS repository and then
      ask a local database server which of the scripts to run.
      You may be interested in experimenting with the Buildbot for this
      purpose.

      <URL:http://buildbot.source forge.net/>

      --
      \ "Madness is rare in individuals, but in groups, parties, |
      `\ nations and ages it is the rule." -- Friedrich Nietzsche |
      _o__) |
      Ben Finney

      Comment

      • James Stroud

        #4
        Re: Running Python scripts from BASH

        Ishpeck wrote:
        I'm using Python to automate testing software for my company. I
        wanted the computers in my testing lab to automatically fetch the
        latest version of the python scripts from a CVS repository and then
        ask a local database server which of the scripts to run.
        >
        I built the following:
        >
        #!/bin/bash
        # Batcher will run the specified scripts.
        >
        cvs update
        >
        while true
        do
        # This part makes sure that
        # every hour or so, we get the latest
        # snapshot of the suite from CVS.
        if [ $(date +%M) = 0 ]; then
        cvs update
        sleep 360
        fi
        # Then we grab the name of
        # a randomly-selected script
        i=$(python randomRun.py)
        # If the return-value of randomRun.py
        #is empty, we don't run it.
        if ["$i"=""]; then
        echo Not running anything
        sleep 3600
        # If randomRun doesn't return
        # empty, we run the script that it prints.
        else
        python "$i";
        sleep 2
        fi
        done
        >
        >
        --------- END BASH FILE --------
        >
        For debugging purposes, you can just build "randomRun. py" to do the
        following:
        >
        print "randomRun. py"
        >
        It's silly but works.
        >
        Whenever I run this script, Python decides that it doesn't like the
        way BASH feeds it the name of the script. I get the following
        message:
        >
        ': [Errno 22] Invalid argumentopen file 'foo.py
        >
        I dunno. Maybe this is a better question for a BASH-related group.
        How do I get around this?
        >
        Perhaps code the whole thing in python and not bash/python. Don't send a
        boy in to do a man's job.

        All you need to remember is

        import os
        [....]
        os.system('what ever command here')

        James

        Comment

        • Ross Ridge

          #5
          Re: Running Python scripts from BASH

          Ishpeck <ishpeck@gmail. comwrote:
          >': [Errno 22] Invalid argumentopen file 'foo.py
          The problem is that Python is using the standard Windows CRLF line
          endings, while Cygwin bash expects Unix LF-only line endings. Your script
          ends up trying run the script "foo.y\r" instead of "foo.y", and since
          CR is isn't allowed in Windows filename you get the "Invalid argument"
          error when Python tries to open the file.
          >Maybe this is a better question for a BASH-related group.
          The Cygwin list probably would've been the best.
          >How do I get around this?
          Don't mix Cygwin tools and native Windows tools. Either use the Cygwin
          version of Python or don't use Cygwin bash.

          Ross Ridge

          Comment

          • Hendrik van Rooyen

            #6
            Re: Running Python scripts from BASH

            "Ishpeck" <ishpeck@gmail. comwrote:

            8<--------------- a bash problem ---------------------

            If it were Python, the advice would have been to use the
            print statement to figure out what the content of the
            variables were.

            As it is Bash, you may have to stoop to something like
            echo to see what is in $i...

            hth - Hendrik

            Comment

            • ina

              #7
              Re: Running Python scripts from BASH

              On Feb 27, 11:16 pm, "Hendrik van Rooyen" <m...@microcorp .co.za>
              wrote:
              "Ishpeck" <ishp...@gmail. comwrote:
              >
              8<--------------- a bash problem ---------------------
              >
              If it were Python, the advice would have been to use the
              print statement to figure out what the content of the
              variables were.
              >
              As it is Bash, you may have to stoop to something like
              echo to see what is in $i...
              >
              hth - Hendrik
              When you print the string in bash it looks correct. It isn't until you
              try to execute it you have the problem.

              os.system is the solution to this problem anyway.

              Comment

              Working...