Pass a bash variable to python script
I have this python script:
#!/usr/bin/env python
def getPermutation(s, prefix=''):
if len(s) == 0:
print prefix
for i in range(len(s)):
getPermutation(s[0:i]+s[i+1:len(s)],prefix+s[i] )
getPermutation('abcd','')
However, I want to be able to call this script using a variable for "abcd" so I can insert any combination of letters instead of "abcd" like "efgh" for example.
Normally, I can use a $@
or $1
instead of abcd
on the last line in a bash script like this:
#!/usr/bin/env python
def getPermutation(s, prefix=''):
if len(s) == 0:
print prefix
for i in range(len(s)):
getPermutation(s[0:i]+s[i+1:len(s)],prefix+s[i] )
getPermutation("$1",'')
But when I run the script using something like ./scriptname.py efgh
I get:
$1
1$
instead of the permutations for "efgh".
Solution 1:
The python equivalent of the shell's positional parameter array $1
, $2
etc. is sys.argv
So:
#!/usr/bin/env python
import sys
def getPermutation(s, prefix=''):
if len(s) == 0:
print prefix
for i in range(len(s)):
getPermutation(s[0:i]+s[i+1:len(s)],prefix+s[i] )
getPermutation(sys.argv[1],'')
then
$ ./foo.py abcd
abcd
abdc
acbd
acdb
adbc
adcb
bacd
badc
bcad
bcda
bdac
bdca
cabd
cadb
cbad
cbda
cdab
cdba
dabc
dacb
dbac
dbca
dcab
dcba
Solution 2:
Lots of ways to parameterize python. positional args, env variables, and named args. Env variables:
import os and use the getenv like:
fw_main_width =os.getenv('FW_MAIN_WIDTH', fw_main_width)
Where the second parameter is the default for the env variable not being set.
Positional args:
Use the sys.argc, sys.argv[n] after you import sys.
Named parameters:
Or for named parameters,(what you asked)
import argparse
then describe the possible parameters:
parser = argparse.ArgumentParser(description = "Project", fromfile_prefix_chars='@')
parser.add_argument("-V", "--version", help="show program version", action="store_true")
parser.add_argument("-W", "--width", help="set main screen width")
read arguments from the command line
args = parser.parse_args()
and use them as args.width etc.