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

Running Python scripts from BASH

P: n/a
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?

Feb 27 '07 #1
Share this Question
Share on Google+
6 Replies


P: n/a
It may be worth noting that I'm running Cygwin on WindowsXP
professional.

Feb 27 '07 #2

P: n/a
"Ishpeck" <is*****@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.sourceforge.net/>

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

Feb 27 '07 #3

P: n/a
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('whatever command here')

James
Feb 27 '07 #4

P: n/a
Ishpeck <is*****@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

Feb 28 '07 #5

P: n/a
"Ishpeck" <is*****@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

Feb 28 '07 #6

P: n/a
ina
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.

Feb 28 '07 #7

This discussion thread is closed

Replies have been disabled for this discussion.