How do I read an argument with spaces when running a python script?
UPDATE:
Looks like my problem is that I'm calling the python script through a shell script:
This works:
> python script.py firstParam file\ with\ spaces.txt
# or
> python script.py firstParam "file with spaces.txt"
# script.py
import sys
print sys.argv
But, not when I run it through a script:
myscript.sh:
#!/bin/sh
python $@
Prints: ['firstParam', 'file', 'with', 'spaces.txt']
But what I want is: ['firstParam', 'file with spaces.txt']
Use
"$@"
instead:Output:
with
/tmp/test.py
defined as:If you want to pass the parameters from a shell script to another program, you should use
"$@"
instead of$@
. This will ensure that each parameter is expanded as a single word, even if it contains spaces.$@
is equivalent to$1 $2 ...
, while"$@"
is equivalent to"$1" "$2" ...
.For example, if you run:
./myscript param1 "param with spaces"
:$@
will be expanded toparam1 param with spaces
- four parameters."$@"
will be expanded to"param1" "param with spaces"
- two parameters.