Kev*_*ion 56 python linux export
我需要在Python中进行这样的导出:
# export MY_DATA="my_export"
Run Code Online (Sandbox Code Playgroud)
我试过这样做:
# -*- python-mode -*-
# -*- coding: utf-8 -*-
import os
os.system('export MY_DATA="my_export"')
Run Code Online (Sandbox Code Playgroud)
但是当我列出导出时,"MY_DATA"不会出现:
# export
Run Code Online (Sandbox Code Playgroud)
如何在不将"my_export"保存到文件中的情况下使用Python进行导出?
ale*_*gle 79
export是一个直接提供给shell的命令(例如bash),告诉它添加或修改其中一个环境变量.您无法从子进程(例如Python)更改shell的环境,这是不可能的.
以下是您尝试发生的事情os.system('export MY_DATA="my_export"')......
/bin/bash process, command `python yourscript.py` forks python subprocess
|_
/usr/bin/python process, command `os.system()` forks /bin/sh subprocess
|_
/bin/sh process, command `export ...` changes local environment
Run Code Online (Sandbox Code Playgroud)
当最底部的/bin/sh子进程完成运行export ...命令时,它将被丢弃,以及刚刚更改的环境.
Ale*_*lex 72
你真的想做
import os
os.environ["MY_DATA"] = "my_export"
Run Code Online (Sandbox Code Playgroud)
小智 14
另一种方法是,如果你赶时间并且不介意hacky-aftertaste,就是在你的bash环境中执行python脚本的输出并打印出用于在python中设置环境的命令.不理想,但它可以在紧要关头完成工作.它不是很容易穿越贝壳,所以YMMV.
$(python -c 'print "export MY_DATA=my_export"')
Run Code Online (Sandbox Code Playgroud)
(你也可以在一些shell``中用反引号括起语句
不那么简单:
python -c "import os; os.putenv('MY_DATA','1233')"
$ echo $MY_DATA # <- empty
Run Code Online (Sandbox Code Playgroud)
但:
python -c "import os; os.putenv('MY_DATA','123'); os.system('bash')"
$ echo $MY_DATA #<- 123
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
112237 次 |
| 最近记录: |