8

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']

0

2 Answers 2

11

Use "$@" instead:

#!/bin/sh
python "$@"

Output:

$ /tmp/test.sh /tmp/test.py firstParam "file with spaces.txt"
['/tmp/test.py', 'firstParam', 'file with spaces.txt']

with /tmp/test.py defined as:

import sys
print sys.argv
Sign up to request clarification or add additional context in comments.

Comments

5

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 to param1 param with spaces - four parameters.
  • "$@" will be expanded to "param1" "param with spaces" - two parameters.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.