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



我有一个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)

我想提供带有破折号字符"一些 - 字符串"的字符串作为参数,但它无法通过 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"将作为三个单独的参数传递。

对于有限的示例,您基本上可以使用相同的行为

arg = os.environ.get('my_param', '')

其中,要get的第一个参数是变量名称,第二个参数是 var 不在环境中时使用的默认值。

当你分配一个 Bash 字符串变量时,你在字符串周围写的引号不会被保留:

$ export my_param="Some -- string"
$ echo $my_param
Some -- string

当您使用它来创建my_param_str时,您需要再次将引号放在变量周围:

my_param_str="--my_param "${my_param}""

相关内容

  • 没有找到相关文章

最新更新