我有一个小的Python 应用程序,通过subprocess.Popen
启动,它以环境变量的形式传递一些参数。我通过将环境结构传递到Popen
调用中来实现这一点。然后通过os.getenv
读取变量。
或者更确切地说,它曾经是那样读取的。在Windows上,它工作得很好。但在我们的FreeBSD服务器上,os.getenv
返回我们传递的所有参数的None
。奇怪的是,os.environ
的值完全正确,并且仅仅将所有os.getenv('foo')
的调用改为 os.environ [ 'foo']
就可以在两个平台上正常工作。
为什么这些值不同?什么时候使用其中之一比另一个更合适?
os.putenv('abc', '123')
无法工作,也就是说,新变量没有被设置。然而,os.environ['abc'] = '123'
可以工作,并且随后os.getenv('abc')
也可以工作。 - coder.in.meputenv()
实际上并没有将环境变量存储在os.environ
中;相反,environ.__setitem__()
调用了putenv()
并且还在本地存储数据,而getenv()
和environ.__getitem__()
都没有实际查询环境本身,它们都是基于os.environ
所存储的数据进行操作。这种实现方式相当令人困惑。 - JAB