python - Bash 将字符串参数传递给 python 脚本

标签 python bash escaping command-line-arguments argparse

我有一个 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: -- stringpython my_script.py --my_param "Some -- string" 运行良好。 我试过使用 nargs 并以这种方式转义 my_param_str="--my_param '${my_param}'" ,但这两种解决方案均无效。 这种情况有什么解决方法吗?或者不同的方法如何处理这个问题?

最佳答案

您的 bash 需要如下所示:

if [ -n "${my_param}" ]
then
    my_param_str="--my_param \"${my_param}\""
fi

echo ${my_param_str}|xargs python -u my_script.py

否则,参数字符串两边的引号将不会保留,“Some”、“--”和“thing”将作为三个单独的参数传递。

关于python - Bash 将字符串参数传递给 python 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37316731/

相关文章:

python - Django 提供静态文件目录,如小型 html 应用程序

bash - 命令在命令行中工作,但在 bash 脚本中给出 'no such file or directory'

使用 Azure CLI 的 Bash 脚本

php - 反引号 MySQL 实体

python - 删除特殊转义python

python - 如何从 pandas.DataFrame.info() 返回一个字符串

python - 在 python 中自定义异常。如何记录错误?

php - 了解 PHP 中的输入转义

python - 从Python字典中高效地获取dstack数组

arrays - 无法在 Bash Shell 脚本中打印整个数组