Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

store return value of a Python script in a bash script

I want to execute a python script from a bash script, and I want to store the output of the python script in a variable.

In my python script, I print some stuff to screen and at the end I return a string with:

sys.exit(myString)  

In my bash script, I did the following:

outputString=`python myPythonScript arg1 arg2 arg3 ` 

But then when I check the value of outputString with echo $outputString I get everything that the Python script had printed to screen, but not the return value myString!

How should I do this?

EDIT: I need the string because that tells me where a file created by the Python script is located. I want to do something like:

fileLocation=`python myPythonScript1 arg1 arg2 arg1` python myPythonScript2 $fileLocation 
like image 611
Ricky Robinson Avatar asked Aug 10 '12 11:08

Ricky Robinson


People also ask

How do I run a python script from a shell script?

To run Python scripts with the python command, you need to open a command-line and type in the word python , or python3 if you have both versions, followed by the path to your script, just like this: $ python3 hello.py Hello World!


1 Answers

sys.exit(myString) doesn't mean "return this string". If you pass a string to sys.exit, sys.exit will consider that string to be an error message, and it will write that string to stderr. The closest concept to a return value for an entire program is its exit status, which must be an integer.

If you want to capture output written to stderr, you can do something like

python yourscript 2> return_file 

You could do something like that in your bash script

output=$((your command here) 2> &1) 

This is not guaranteed to capture only the value passed to sys.exit, though. Anything else written to stderr will also be captured, which might include logging output or stack traces.

example:

test.py

print "something" exit('ohoh')  

t.sh

va=$(python test.py 2>&1)                                                                                                                     mkdir $va 

bash t.sh

edit

Not sure why but in that case, I would write a main script and two other scripts... Mixing python and bash is pointless unless you really need to.

import script1 import script2  if __name__ == '__main__':     filename = script1.run(sys.args)     script2.run(filename) 
like image 145
Loïc Faure-Lacroix Avatar answered Oct 03 '22 09:10

Loïc Faure-Lacroix