Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用python tox取消设置环境变量?_Python_Tox - Fatal编程技术网

如何使用python tox取消设置环境变量?

如何使用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,文档说:

我非常了解tox.ini文件上的
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
变量是正确的通用解决方案。