Call Python script from bash with argument

Posted on

Question :

Call Python script from bash with argument

I know that I can run a python script from my bash script using the following:


But what about if I wanted to pass a variable / argument to my python script from my bash script. How can I do that?

Basically bash will work out a filename and then python will upload it, but I need to send the filename from bash to python when I call it.

Asked By: Jimmy


Answer #1:

To execute a python script in a bash script you need to call the same command that you would within a terminal. For instance

> python var1 var2

To access these variables within python you will need

import sys
print sys.argv[0] # prints
print sys.argv[1] # prints var1
print sys.argv[2] # prints var2
Answered By: iamthedrake

Answer #2:


python filename

and in your Python script

import sys
print sys.argv[1]
Answered By: NPE

Answer #3:

Beside sys.argv, also take a look at the argparse module, which helps define options and arguments for scripts.

The argparse module makes it easy to write user-friendly command-line interfaces.

Answered By: miku

Answer #4:

Embedded option:

Wrap python code in a bash function.


function current_datetime {
python - <<END
import datetime

# Call it

# Call it and capture the output
echo Current date and time: $DT

Use environment variables, to pass data into to your embedded python script.


function line {
PYTHON_ARG="$1" python - <<END
import os
line_len = int(os.environ['PYTHON_ARG'])
print '-' * line_len

# Do it one way
line 80

# Do it another way
echo $(line 80)

Answered By: user77115

Answer #5:

use in the script:

echo $(python arg1 arg2) > /dev/null


python "string arg"  > /dev/null

The script will be executed without output.

Answered By: burseaner

Answer #6:

I have a bash script that calls a small python routine to display a message window. As I need to use killall to stop the python script I can’t use the above method as it would then mean running killall python which could take out other python programmes so I use "$argument" & # The & returns control straight to the bash script so must be outside the backticks. The preview of this message is showing it without “`” either side of the command for some reason.

As long as the python script will run from the cli by name rather than python this works within the script. If you need more than one argument just use a space between each one within the quotes.

Answered By: Dave Thebuskeruk

Answer #7:

Print all args without the filename:

for i in range(1, len(sys.argv)):
Answered By: Riade

Answer #8:

and take a look at the getopt module.
It works quite good for me!

Answered By: HappyHacking

Leave a Reply

Your email address will not be published. Required fields are marked *