如何将字符串从 bash 传递到 python 函数

如何将字符串从 bash 传递到 python 函数

我有一个 python 函数,它接受一个参数作为输入,我想自动化并通过 bash 调用它。但是当我在调用它时传递变量(字符串)时,bash 给出错误

a="test"
python -c "from pipeline_runs.z_full_pipeline import test; test($a)"

失败了

NameError: name 'test' is not defined

但当变量为 int 时,效果相同

a="10"
python -c "from pipeline_runs.z_full_pipeline import test; test($a)"

当第一个代码失败时它会运行。任何人都可以解释为什么会出现这样的行为,以及我应该更改什么才能将字符串从 bash 脚本传递到 python 函数

答案1

改为将其设为 shell 函数。将其粘贴到您的终端中,或添加到 shell 的配置文件中(例如,~/.bashrc对于 bash)

pipeline_test(){
  python -c 'from sys import argv; from pipeline_runs.z_full_pipeline import test; test(argv[1])' "$@"
}

然后运行为

pipeline_test "$a"

答案2

你试一试:

export a="test"
python -c "from pipeline_runs.z_full_pipeline import test; test('$a')"

在这种情况下,该命令将扩展为from pipeline_runs.z_full_pipeline import test; test('test')

你将拥有'test'而不是test.前者是一个字符串,后者是一个未定义的变量。

但一个安全的方法是使用os.environ字典。然后将脚本放入 example.py 文件中。并开始:

import os
a = os.environ['a']
test(a)

这种方式具有更好的可扩展性,并且您不必扩展字符串。

注意,在 shell 中,a="test"a=test是同义词。

相关内容