8

运行 python 脚本时如何读取带空格的参数?

更新

看起来我的问题是我通过 shell 脚本调用 python 脚本:

这有效:

> python script.py firstParam file\ with\ spaces.txt
# or
> python script.py firstParam "file with spaces.txt"

# script.py
import sys
print sys.argv

但是,不是当我通过脚本运行它时:

myscript.sh:

#!/bin/sh
python $@

打印:['firstParam', 'file', 'with', 'spaces.txt']

但我想要的是: ['firstParam', 'file with spaces.txt']

4

2 回答 2

11

改用"$@"

#!/bin/sh
python "$@"

输出:

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

/tmp/test.py定义为:

import sys
print sys.argv
于 2012-05-29T14:50:50.810 回答
5

如果你想将参数从一个 shell 脚本传递给另一个程序,你应该使用"$@"而不是$@. 这将确保每个参数都被扩展为一个单词,即使它包含空格。$@等价于$1 $2 ...,而"$@"等价于"$1" "$2" ...

例如,如果您运行./myscript param1 "param with spaces"

  • $@将扩展为param1 param with spaces- 四个参数。
  • "$@"将扩展为"param1" "param with spaces"- 两个参数。
于 2012-05-29T14:50:51.693 回答