可能重复:
如何在Python中设置环境变量
我的python脚本调用许多python函数和shell脚本.我想在Python(主调用函数)和所有子进程(包括shell脚本)中设置环境变量以查看环境变量集.
我需要设置一些像这样的环境变量:
DEBUSSY 1
FSDB 1
Run Code Online (Sandbox Code Playgroud)
1是一个数字,而不是一个字符串.另外,如何读取存储在环境变量中的值?(喜欢DEBUSSY/ FSDB在另一个python子脚本中.)
在多GPU计算机中,如何指定应运行CUDA作业的GPU?
作为一个例子,在安装CUDA时,我选择安装NVIDIA_CUDA-<#.#>_Samples然后运行几个nbody模拟实例,但它们都在一个GPU 0上运行; GPU 1完全空闲(使用监控watch -n 1 nvidia-dmi).检查CUDA_VISIBLE_DEVICES使用
echo $CUDA_VISIBLE_DEVICES
Run Code Online (Sandbox Code Playgroud)
我发现这没有设定.我尝试使用它
CUDA_VISIBLE_DEVICES=1
Run Code Online (Sandbox Code Playgroud)
然后nbody再次运行但它也进入了GPU 0.
我看了相关的问题,如何选择指定的GPU来运行CUDA程序?,但deviceQuery命令不在CUDA 8.0 bin目录中.除此之外$CUDA_VISIBLE_DEVICES$,我看到其他帖子引用环境变量,$CUDA_DEVICES但这些没有设置,我没有找到有关如何使用它的信息.
虽然与我的问题没有直接关系,但是使用nbody -device=1我能够让应用程序在GPU 1上运行但是使用nbody -numdevices=2不能在GPU 0和1上运行.
我在使用bash shell运行的系统上测试这个,在CentOS 6.8上,使用CUDA 8.0,2 GTX 1080 GPU和NVIDIA驱动程序367.44.
我知道在使用CUDA编写时,您可以管理和控制要使用的CUDA资源,但在运行已编译的CUDA可执行文件时,如何从命令行管理?
我使用以下代码临时修改环境变量.
@contextmanager
def _setenv(**mapping):
"""``with`` context to temporarily modify the environment variables"""
backup_values = {}
backup_remove = set()
for key, value in mapping.items():
if key in os.environ:
backup_values[key] = os.environ[key]
else:
backup_remove.add(key)
os.environ[key] = value
try:
yield
finally:
# restore old environment
for k, v in backup_values.items():
os.environ[k] = v
for k in backup_remove:
del os.environ[k]
Run Code Online (Sandbox Code Playgroud)
此with上下文主要用于测试用例.例如,
def test_myapp_respects_this_envvar():
with _setenv(MYAPP_PLUGINS_DIR='testsandbox/plugins'):
myapp.plugins.register()
[...]
Run Code Online (Sandbox Code Playgroud)
我的问题:是否有简单/优雅的写作方式_setenv?我想过实际上做backup = os.environ.copy(),然后os.environ = backup..但我不知道是否会影响程序行为(例如:如果os.environ被引用在Python解释器在其他地方).
是否有可能改变当前流程的环境变量?
更具体地说,我想改变python脚本,LD_LIBRARY_PATH以便在导入依赖于某些模块的模块'x'时xyz.so,xyz.so取自LD_LIBRARY_PATH中的给定路径
有没有其他方法动态更改库加载的路径?
编辑:我想我需要提一下,我已经尝试过像os.environ这样的东西["LD_LIBRARY_PATH"] = mypath os.putenv('LD_LIBRARY_PATH',mypath)
但这些修改了env.对于生成的子进程,而不是当前进程,并且模块加载不考虑新的LD_LIBRARY_PATH
Edit2,所以问题是我们可以改变环境或其他东西,以便库加载器看到它并从那里加载吗?
我是新手,我只是想了解这个with陈述.我明白它应该替换try/ exceptblock.
现在假设我做了这样的事情:
try:
name='rubicon'/2 # to raise an exception
except Exception as e:
print "no not possible"
finally:
print "Ok I caught you"
Run Code Online (Sandbox Code Playgroud)
如何用上下文管理器替换它?
是否可以打印我的环境变量内存地址?
随着gdb-peda我有一个内存地址看起来像0xbffffcd6有searchmem,我知道这是正确的方式.(0xbfff????)但是gdb使用其他一些环境变量移动了堆栈.
我想用我的python脚本来获取这个地址然后做我的技巧并包含我的shellcode.
我试过(使用Python):
print hex(id(os.environ["ENVVAR"]))
print memoryview(os.environ["ENVVAR"])
# output :
# 0xb7b205c0L
# <memory at 0xb7b4dd9c>
Run Code Online (Sandbox Code Playgroud)
使用Ruby:
puts (ENV['PATH'].object_id << 1).to_s(16)
# output :
# -4836c38c
Run Code Online (Sandbox Code Playgroud)
如果有人有想法,使用python或ruby.
我试图通过Python中的代理服务器访问Web.我正在使用请求库,我遇到了验证我的代理的问题,因为我使用的代理需要密码.
proxyDict = {
'http' : 'username:mypassword@77.75.105.165',
'https' : 'username:mypassword@77.75.105.165'
}
r = requests.get("http://www.google.com", proxies=proxyDict)
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
Traceback (most recent call last):
File "<pyshell#13>", line 1, in <module>
r = requests.get("http://www.google.com", proxies=proxyDict)
File "C:\Python27\lib\site-packages\requests\api.py", line 78, in get
:param url: URL for the new :class:`Request` object.
File "C:\Python27\lib\site-packages\requests\api.py", line 65, in request
"""Sends a POST request. Returns :class:`Response` object.
File "C:\Python27\lib\site-packages\requests\sessions.py", line 187, in request
def head(self, url, **kwargs):
File "C:\Python27\lib\site-packages\requests\models.py", line 407, in send
"""
File "C:\Python27\lib\site-packages\requests\packages\urllib3\poolmanager.py", line 127, in …Run Code Online (Sandbox Code Playgroud) 在 Ubuntu bash shell 中,我可以使用命令行“source”(例如:)从 .env 文件设置环境变量source $OCSSWROOT/OCSSW_bash.env。
但source不是python中的函数。那么,如何从 python 中的 .env 文件设置环境变量?
'l2gen' 是 SeaDAS 的命令行程序,由 NASA 支持,用于处理海洋卫星数据。我可以在 bash shell 中运行它。现在,更多的程序需要用 python 脚本编码,'l2gen' 是程序之一。
但是需要在python脚本中重新设置环境变量。根据谷歌搜索结果,我喜欢在python中设置环境变量的一些方法。但缺少有关 .env 文件的信息。
在 Linux bash shell 中,我通过 vim 和 source 设置了环境变量:
vim .profile
export OCSSWROOT=[SeaDAS_install_dir]/ocssw (adding this in the profile
file and then save/exit)
source $OCSSWROOT/OCSSW_bash.env
Run Code Online (Sandbox Code Playgroud)
其中: SeaDAS_install_dir 是我安装软件 SeaDAS 的目录。
我尝试添加环境变量如下:
import subprocess
if __name__=='__main__':
l2cmdtest = 'l2gen -h'
new_env = os.environ.copy()
new_env['OCSSWROOT'] = '/usr/local/seadas-7.5.3/ocssw'
new_env['OCSSWROOT'] = 'OCSSWROOT/OCSSW_bash.env'
eturnCodetest …Run Code Online (Sandbox Code Playgroud) 在我的项目中,我使用内置的 python 虚拟环境 ( python -m venv)。
为了设置环境变量,我将多个添加export VAR1=VALUE1到venv/bin/activate.
显然,当我删除 venv 并创建一个新的 venv 时,例如使用新的 python 版本,我的所有 env 变量都会丢失。
那么,有没有办法保存它们呢?也许可以在创建 venv 时定义 env 变量?
python environment-variables virtualenv python-3.x python-venv
python ×9
bash ×1
cuda ×1
http ×1
linux ×1
memory ×1
nvidia ×1
proxies ×1
proxy ×1
python-3.x ×1
python-venv ×1
ruby ×1
shell ×1
virtualenv ×1