我有一个 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
是同义词。