如何使用python tox取消设置环境变量?
我非常了解tox.ini文件上的如何使用python tox取消设置环境变量?,python,tox,Python,Tox,我非常了解tox.ini文件上的passenv和setenv用法,但我面临的情况是,我想取消某些变量的定义,以便它们不包含在通配符passenv中 范例 [testenv] passenv = ANSIBLE_* # I how do I assure that ANSIBLE_INVENTORY is not passed? 引用文件: tox将为您处理环境隔离:它将去除所有未通过passenv指定的操作系统环境变量 也就是说,您只是没有提到您不希望传递的变量 对于passenv,文档说:
passenv
和setenv
用法,但我面临的情况是,我想取消某些变量的定义,以便它们不包含在通配符passenv中
范例
[testenv]
passenv = ANSIBLE_*
# I how do I assure that ANSIBLE_INVENTORY is not passed?
引用文件:
tox将为您处理环境隔离:它将去除所有未通过passenv
指定的操作系统环境变量
也就是说,您只是没有提到您不希望传递的变量
对于passenv
,文档说:
您可以使用setenv
选项覆盖这些变量
由于未设置的shell变量看起来像一个空字符串,因此您可以尝试将setenv
设置为'
所有不希望传递的变量。它可能工作,也可能不工作,这取决于代码如何使用这些变量,因为空的env变量和未设置的env变量之间存在差异
我看不到任何方法可以选择性地取消设置tox文档中的变量。我建议使用一些比ANSIBLE弱的通配符,这样它们就不会让您想要保持未设置的变量进入
另一种解决方案是在运行tox
的shell中取消设置变量,以便tox进程无法访问和传递它们:
#/垃圾箱/垃圾箱
未设置ANSIBLE\u密钥\u至\u王国
毒素“$@”
到目前为止,似乎不可能执行这样的unset,所以我在
有一个解决办法,但它非常不方便,我甚至不知道它是否值得一提:
command = bash -c "unset ANSIBLE_INVENTORY; <original command>"
command=bash-c“未设置可用资源清册
正如您所看到的,这种方法根本不可伸缩,并且会使tox.ini的维护成为一个真正的负担。将变量设置为空字符串与取消设置它是不同的。我知道在很多情况下,使用这些工具的工具在空变量上会出现错误行为。@sorin:没错!答案中详细说明了这一点。并非所有程序都能识别这一点(例如,大多数shell脚本和Python脚本不能识别),但有些程序能识别。
unset
变量是正确的通用解决方案。