Send a parameter from bash to a python script - python

I'm trying to send a parameter on jenkins and have the parameter recognized on the a python file.
Is there a command where I could do this on bash:
param = "Hello World"
param -> /usr/green/test.py
Also how does the py file know to grab the parameter?

you can pass parameters from BASH to you python script via using sys egg in the python scripts. then pass on the environment variables in the command .
PyScript
import sys
print 'Number of arguments:', len(sys.argv), 'arguments.'
print 'Argument List:', str(sys.argv)
command in BASH :
$python test.py $BUILD_ID $BUILD_URL
output :
Number of arguments: 2 arguments.
Argument List: ['test.py', '107', 'http://0.0.0.0:8080/artefact/builds/24']

You can access parameters passed to the script this way:
import sys
print sys.argv[1]
~ python test.py 'hello world'

You have to put the script's arguments after the file path separated by spaces, like this:
/usr/green/test.py arg1 arg2 arg3
to pass the value of a bash variable to the script, you have to prefix the variable name with a $ (dollar sign):
param="Hello world"
/usr/green/test.py "$param"
The list of arguments in the python script can be accessed with sys.argv. The first element in the list is the path to the script therefore the second element is the first argument.
Example
/usr/green/test.py (Python 3):
import sys
print(sys.argv[1])
bash input:
param="Hello World"
python3 /usr/green/test.py "$param"
bash output:
Hello World
Note: You have to put the variable name in quotes or Hello and World will be passed as two separate arguments to test.py.
To execute the script without the python command, you can add a #! (shebang) line:
#!/usr/bin/python3
import sys
print(sys.argv[1])
Make the script executable by typing in bash:
chmod +x /usr/green/test.py

One solution would be to print the parameter and process through a pipe with python.
Like:
read.py:
#!/usr/bin/python
import sys
pythonparams = sys.stdin.read()
# do something
then
echo "$param"|./read.py

Related

How to pass a parameter via CMDline in Python Script

I have a python script that looks like this:
a='{}'
From my cmdline i want to be able to pass a parameter for that value in the brackets. So:
python- my_script.py Hello World
The output would then be:
'Hello World'
Any ideas or suggestion as to how to pass a parameter on the command line in a python script when running it? I am new to python so any tips would help!
Reference here!
I'm also fairly new to Python so not 100% positive this works but assuming it does, To recreate what your searching for.
#!/usr/bin/python
import sys
print ('Number of arguments:', len(sys.argv), 'arguments.')
print ('Argument List:', str(sys.argv))
After adding the Import sys
Where your python my_script.py 'Hello World'
Note that:
my_script.py equals sys.argv[0]
'Hello World' equals sys.argv[1]
Therefore setting a = sys.argv[1] should work!
To test it try to print(a)
Also note that this will not work if your cmdline is
python my_script.py Hello World
This will treat Hello and world as two separate arguments.

How to use a argument variable argv?

I wrote the following command but I don't understand it.
from sys import argv
what is argv?
how to use it?
I wrote sycript,a,b=argv
but I am getting the error that need more than one value to unpack.
argv - The list of command line arguments passed to a Python script.
sycript,a,b=argv gives you "ValueError: need more than 1 value to unpack" because you have just run the script as python <script_name.py> without giving the two arguments.
Run the script like this: python <script_name.py> <arg1> <arg2>
For example,
script.py:
from sys import argv
arg,a,b=argv
print(arg,a,b)
run script.py "arg1" "arg2" and output:
script.py arg1 arg2
I think you should run the command by typing
python scriptname a b
By scriptname I mean the name by which you have saved the program code.
I hope this helps..

Run function from the command line and pass arguments to function

I'm using similar approach to call python function from my shell script:
python -c 'import foo; print foo.hello()'
But I don't know how in this case I can pass arguments to python script and also is it possible to call function with parameters from command line?
python -c 'import foo, sys; print foo.hello(); print(sys.argv[1])' "This is a test"
or
echo "Wham" | python -c 'print(raw_input(""));'
There's also argparse (py3 link) that could be used to capture arguments, such as the -c which also can be found at sys.argv[0].
A second library do exist but is discuraged, called getopt.getopt.
You don't want to do that in shell script.
Try this. Create a file named "hello.py" and put the following code in the file (assuming you are on unix system):
#!/usr/bin/env python
print "Hello World"
and in your shell script, write something lke this
#!/bin/sh
python hello.py
and you should see Hello World in the terminal.
That's how you should invoke a script in shell/bash.
To the main question: how do you pass arguments?
Take this simple example:
#!/usr/bin/env python
import sys
def hello(name):
print "Hello, " + name
if __name__ == "__main__":
if len(sys.argv) > 1:
hello(sys.argv[1])
else:
raise SystemExit("usage: python hello.py <name>")
We expect the len of the argument to be at least two. Like shell programming, the first one (index 0) is always the file name.
Now modify the shell script to include the second argument (name) and see what happen.
haven't tested my code yet but conceptually that's how you should go about
edit:
If you just have a line or two simple python code, sure, -c works fine and is neat. But if you need more complex logic, please put the code into a module (.py file).
You need to create one .py file.
And after you call it this way :
python file.py argv1 argv2
And after in your file, you have sys.argv list, who give you list of argvs.

Call Python script from bash with argument

I know that I can run a python script from my bash script using the following:
python python_script.py
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.
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 python_script.py var1 var2
To access these variables within python you will need
import sys
print(sys.argv[0]) # prints python_script.py
print(sys.argv[1]) # prints var1
print(sys.argv[2]) # prints var2
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.
Use
python python_script.py filename
and in your Python script
import sys
print sys.argv[1]
Embedded option:
Wrap python code in a bash function.
#!/bin/bash
function current_datetime {
python - <<END
import datetime
print datetime.datetime.now()
END
}
# Call it
current_datetime
# Call it and capture the output
DT=$(current_datetime)
echo Current date and time: $DT
Use environment variables, to pass data into to your embedded python script.
#!/bin/bash
function line {
PYTHON_ARG="$1" python - <<END
import os
line_len = int(os.environ['PYTHON_ARG'])
print '-' * line_len
END
}
# Do it one way
line 80
# Do it another way
echo $(line 80)
http://bhfsteve.blogspot.se/2014/07/embedding-python-in-bash-scripts.html
use in the script:
echo $(python python_script.py arg1 arg2) > /dev/null
or
python python_script.py "string arg" > /dev/null
The script will be executed without output.
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
pythonprog.py "$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 pythonprog.py this works within the script. If you need more than one argument just use a space between each one within the quotes.
and take a look at the getopt module.
It works quite good for me!
Print all args without the filename:
for i in range(1, len(sys.argv)):
print(sys.argv[i])

what is a commandline argument?

I am a newcomer to python (also very sorry if this is a newb question but) i have no idea what a command line argument is. when sys.argv is called, what exactly are the arguments? Any help with understanding this would be a great service.
Try running this program:
import sys
print(sys.argv)
You should see results similar to this:
% test.py
['/home/unutbu/pybin/test.py']
% test.py foo
['/home/unutbu/pybin/test.py', 'foo']
% test.py foo bar
['/home/unutbu/pybin/test.py', 'foo', 'bar']
% python test.py foo
['test.py', 'foo']
So, you see sys.argv is a list. The first item is the path to (or filename of) the script being run, followed by command-line arguments.
Given the command myscript.py arg1 arg2 arg3, the arguments are arg1, arg2 and arg3. sys.argv will also include the script name (i.e. myscript.py) in the first position.
Command line arguments are not specific to python.
Command line arguments are parameters you type after the script name. Eg. if you type: python test.py arg1, the first argument is arg1.
For examples, take a look at jhu.edu.
The command line arguments are the strings you type after a command in the command line, for instance:
python --help
Here --help is the argument for the python command, that shows a help page with the valid command line arguments for the python command.
In a python program, you have access to the arguments in sys.argv, so let's say you started a python script like this:
python myscript.py -x -y
When myscript.py starts, sys.argv[1] will have as value the string '-x' and sys.argv[2] will have as value the string '-y'. What you do with those arguments is up to you, and there are modules to help you easily define command line arguments, for instance argparse.
The arguments are usually used as a way of telling the program what it should do when it is run.
If I had a program named writefile.py, and I wanted the user to tell it which file to write, then I would run it with python writefile.py targetfile.txt. My sample writefile.py:
import sys
file = open(sys.argv[1], 'w') # sys.argv[0] = 'writefile.py' (unutbu's answer)
file.write('ABCDE')
file.close
After running this, I'll have a file named targetfile.txt with the contents "ABCDE". If I ran it with python writefile.py abcde.txt, I'd have abcde.txt with the contents "ABCDE".

Categories

Resources