【发布时间】:2016-09-15 22:48:56
【问题描述】:
我有一个 bash 脚本,它从环境中读取变量,然后像这样将它传递给 python 脚本
#!/usr/bin/env bash
if [ -n "${my_param}" ]
then
my_param_str="--my_param ${my_param}"
fi
python -u my_script.py ${my_param_str}
对应的python脚本是这样的
parser = argparse.ArgumentParser(description='My script')
parser.add_argument('--my_param',
type=str,
default='')
parsed_args = parser.parse_args()
print(parsed_args.description)
我想提供带有破折号“Some -- string”作为参数的字符串,但它不能通过 bash 脚本工作,但通过命令行直接调用可以。
export my_param="Some -- string"
./launch_my_script.sh
给出错误unrecognized arguments: -- string 和
python my_script.py --my_param "Some -- string" 效果很好。
我尝试过使用 nargs 并以这种方式逃避my_param_str="--my_param '${my_param}'",但两种解决方案均无效。
这种情况有什么解决方法吗?或者不同的方法如何处理?
【问题讨论】:
-
--在正常情况下标记命令参数的结束。 -
您应该总是双引号 Bash 参数扩展,除非您明确希望 Bash 执行分词...而您可能真的不想要分词。 :) 见BashGuide 和ShellCheck。
-
查看
sys.argv以了解bash为您的脚本提供了什么。argparse只能解析该列表中的字符串。
标签: python bash escaping command-line-arguments argparse