Re: [问题] os.environ 和 os.putenv

楼主: uranusjr (←這人是超級笨蛋)   2016-05-12 22:40:44
※ 引述《obelisk0114 (追风筝的孩子)》之铭言:
: 一.
: 假如只是要获得某个环境的绝对路径,例如: AppData
: os.getenv('LOCALAPPDATA') 和 os.environ['LOCALAPPDATA']
: 完全一样吗 ?
getenv 在 key 不存在时会回传 default (默认是 None)
所以其实是和 os.environ.get() 一样
: 二.
: 若作业系统支援 os.putenv()
: 使用 os.environ 则会自动呼叫 os.putenv 来改变环境变量
: 若直接使用 os.putenv 而不透过 os.environ 时, 则不会改变 os.environ 里的变量
: 但是 python 不是不能直接操作作业系统吗,
: 所以结束 python 之后环境变量还是一样
: 这样两者有何差别 ?
首先, Python“可以”操作作业系统
不过这个先不管
差别在于, 如果你在 putenv 后开启一个 subprocess
(包含用 os.system, subprocess 等等)
这个子程序会看到 os.putenv 设定的变量
但程序本身并不会看到
另一方面, 直接修改 environ 则是可以被程序本身使用, 子程序也会看到
: 三.
: 作业系统不支援 os.putenv() 时,
: os.environ 会创造一个新的程序来使用修改过的环境变量
: 实际用途是什么 ?
没这种事, 你读错文件了
文件说的是, 如果作业系统不支援 putenv
则子程序会使用 os.environ 的一个 copy 作为它的环境
如果有 putenv, 则修改 os.environ 会直接触发 putenv
这种情况下子程序就不需要这个 mapping, 直接和作业系统要环境变量即可
: 四.
: 有些作业系统, 像是 FreeBSD 和 Mac OS X, 设定 os.environ 会导致内存泄漏
: 程式终止或是结束 python 可以重新取回该漏失的内存吗 ?
可以
: 直接使用 os.putenv() 也会造成内存泄漏吗 ?

: 有可能重新用另一段程式码来使用该漏失的内存吗 ?
不行
作者: GNUGCC (-std=c++14)   2016-08-10 00:59:00
void main(void) 的写法是可行的唷^^虽然这个写法较传统,但是语法与文法都正确哦^^目前我使用的 Visual C++ 都接受 void main(void) 与int main(void),各位可以把 C++ 专案改成原生 C++ 类型来用 void main(void) 来写发现也可通过编译.这个就是 Visual C++ 的弹性.
作者: obelisk0114 (追风筝的孩子)   2016-05-13 16:51:00
python 可以不透过呼叫 cmd 直接修改作业系统的环境?

Links booklink

Contact Us: admin [ a t ] ucptt.com