【发布时间】:2012-05-21 17:30:18
【问题描述】:
我有一个引导程序 (bash),它应该在启动 propper python 脚本之前过滤掉一些参数。
问题是,每当我将带有空格的字符串传递到引导程序时,一旦到达 python,它就会被破坏
例如执行
./myBootStrap.sh --preload "argl bargl" -j -as -argl --postload "my Test"
打印这个
Executing myBootStrap --preload "argl bargl" -j -as -argl --postload "my Test"
我的 python 脚本打印它的参数
got arguments ['myBootStrap','--preload', '"argl', 'bargl"', '-j', '-as', '-argl', '--postload', '"my', 'Test"']
如您所见,“argl bargl”和“my Test”被拆分为 ['"argl','bargl"'] & ['"my', 'Test"'],而不是保持组合。
知道我的代码有什么问题吗?
谢谢大家!
myBootStrap.sh
#!/bin/bash
declare -a argv
for ((i=1;i<=${#@};i+=1))
do
arg=${@:i:1}
if [[ "$arg" == "--preload"* ]];then
i=$i+1
marg=${@:$((i)):1}
preLoadO=$arg
preLoadA=" \"${marg}\""
argv=("${argv[@]}" $arg)
argv=("${argv[@]}" $preLoadA)
elif [[ "$arg" == "--postload"* ]];then
i=$i+1
marg=${@:$((i)):1}
postLoadO=$arg
postLoadA=" \"${marg}\""
argv=("${argv[@]}" $arg)
argv=("${argv[@]}" $postLoadA)
else
argv=("${argv[@]}" $arg)
fi
done
arguments=$(printf " %s" "${argv[@]}")
arguments=${arguments:1}
echo "Executing myBootStrap" $arguments
exec myBootStrap $arguments
和python脚本myBootStrap
#!/usr/bin/env python
import sys
print 'got arguments %s'%sys.argv
【问题讨论】:
-
不幸的是,我必须先通过 bash,因为它设置了很多环境变量等,所以没有办法绕过 bash :(
-
那我推荐GNU
getopt -
@Seb:你也可以在 Python 中设置环境变量,使用
os.environ。 -
@mata: I wouldn't.
标签: python bash unix arguments