从一个shell脚本读取python脚本与空间参数(Read argument with space

2019-09-17 14:22发布

如何运行一个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', '文件', '与', 'spaces.txt']

但我要的是:“firstParam”,“与spaces.txt文件”]

Answer 1:

"$@"来代替:

#!/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


Answer 2:

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

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

  • $@将扩大到param1 param with spaces -四个参数。
  • "$@"将扩大到"param1" "param with spaces" -两个参数。


文章来源: Read argument with spaces in python script from a shell script
标签: python shell