gpt4 book ai didi

Python 与 C - 在 Windows 中处理环境变量

转载 作者:太空宇宙 更新时间:2023-11-03 23:36:35 24 4
gpt4 key购买 nike

我看到在试图获得相同功能的 Windows 中,C 和 Python 代码的输出存在差异。 c 代码(类似于 unix shell 脚本)在“test.bat.output”中显示 TEST1 环境变量,其值为空字符串,而 python 代码删除此环境变量。

有没有办法让 Python 在 environ 表为空时不删除环境变量?

C

#include <windows.h>

main()
{

DWORD dwRet;
char pszOldVal[1024] = "abc";

if(! SetEnvironmentVariable("TEST1", ""))
puts("Error\n");

// _putenv("TEST1=");

// GetEnvironmentVariable("TEST1", pszOldVal, dwRet);
system("cmd /c test.bat >test.bat.output");
}

python

import os
os.environ['TEST1'] = ""
os.environ['TEST2'] = "karthik"
os.system("cmd /c test.bat > test.bat.output.python")

-卡尔提克

最佳答案

Windows 和“大多数其他人”(从 Unix 派生或启发的操作系统)之间的跨平台兼容性通常很难获得,尤其是在不可避免地出现的无数极端情况下(例如,在这个问题中,“是否设置一个环境变量为空意味着取消设置”)。有时直接访问 Windows 特定功能比尝试扩展“跨平台”功能更容易。

虽然从 Python 访问特定于 Windows 的功能的传统方法是 win32all扩展包,在最近的 Python 版本中为 ctypes标准库模块提供了一个替代方案,其优点是不需要安装 C 编码的扩展。一个有趣的项目是 jaraco.windows ,一组基于 ctypes 的纯 Python 代码,使 Windows 操作更轻松、更流畅。例如,如果您使用环境和/或注册表,则 environ.py模块提供了一组很好的函数和类,与底层 ctypes 访问的裸 win32 API 相比,它们具有更 Pythonic 的感觉(例如,在以下情况下获取带有可读错误消息的异常错误,而不必检查返回码 &c)。

关于Python 与 C - 在 Windows 中处理环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1572153/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com