Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python脚本中更改环境变量LANG?_Python_Linux_Encoding_Utf 8 - Fatal编程技术网

如何在Python脚本中更改环境变量LANG?

如何在Python脚本中更改环境变量LANG?,python,linux,encoding,utf-8,Python,Linux,Encoding,Utf 8,我正在用python编写一个脚本,生成包含utf-8字符的输出,尽管大多数linux终端默认使用utf-8,但我编写的代码假定它不是utf-8(以防用户出于某种原因更改它) 根据我的测试,os.environ[“LANG”]=“en_US.utf-8”不会更改系统环境变量,它只会更改Python内部的数据结构。我认为您做得太过分了。Python自带电池;就用它们吧 正确配置的终端会话设置了LANG环境变量;它描述了终端期望在此会话中运行的程序输出的编码 Python解释器检测此设置并根据它设置s

我正在用python编写一个脚本,生成包含utf-8字符的输出,尽管大多数linux终端默认使用utf-8,但我编写的代码假定它不是utf-8(以防用户出于某种原因更改它)


根据我的测试,
os.environ[“LANG”]=“en_US.utf-8”
不会更改系统环境变量,它只会更改Python内部的数据结构。

我认为您做得太过分了。Python自带电池;就用它们吧

正确配置的终端会话设置了
LANG
环境变量;它描述了终端期望在此会话中运行的程序输出的编码

Python解释器检测此设置并根据它设置
sys.stdout.encoding
。然后,它使用该编码将任何Unicode输出编码为正确的字节序列。(如果您发送的是字节序列,那么您是自己发送的,并且可能知道自己在做什么;可能您发送的是二进制流,而不是文本。)

因此,如果您将文本输出为Unicode,那么它必须自动正确显示,前提是所有字符都可以编码

如果需要更精细的控件,请选择输出编码,使用自己的错误处理进行编码,然后输出字节


您不需要更改终端会话的设置,除非您专门为此编写了一个工具。用户已配置会话;如果程序运行良好,您的程序必须适应此配置,而不是修改它。

我认为您做得太过分了。Python自带电池;就用它们吧

正确配置的终端会话设置了
LANG
环境变量;它描述了终端期望在此会话中运行的程序输出的编码

Python解释器检测此设置并根据它设置
sys.stdout.encoding
。然后,它使用该编码将任何Unicode输出编码为正确的字节序列。(如果您发送的是字节序列,那么您是自己发送的,并且可能知道自己在做什么;可能您发送的是二进制流,而不是文本。)

因此,如果您将文本输出为Unicode,那么它必须自动正确显示,前提是所有字符都可以编码

如果需要更精细的控件,请选择输出编码,使用自己的错误处理进行编码,然后输出字节


您不需要更改终端会话的设置,除非您专门为此编写了一个工具。用户已配置会话;如果程序性能良好,则程序必须适应此配置,而不是更改它。

不清楚在更改LANG环境时希望看到什么。如果您想用其他字符编码测试Python代码,那么需要在启动Python代码之前设置LANG,因为我相信在Python首次启动时会读取LANG

在Python启动后,可能会有一个函数调用,您可以调用它来更改LANG,但是如果这是出于测试目的,我建议在运行Python代码之前设置它


然而,一个更好的方法是更改终端程序中的LANG。使其具有正确的编码。虽然几乎每个人都应该使用UTF8,但我不确定您是否需要再测试非UTF8。

不清楚您希望在更改LANG环境时看到什么。如果您想用其他字符编码测试Python代码,那么需要在启动Python代码之前设置LANG,因为我相信在Python首次启动时会读取LANG

在Python启动后,可能会有一个函数调用,您可以调用它来更改LANG,但是如果这是出于测试目的,我建议在运行Python代码之前设置它


然而,一个更好的方法是更改终端程序中的LANG。使其具有正确的编码。虽然几乎每个人都应该使用UTF8,但我不确定您是否需要再测试非UTF8。

为什么不直接
.encode(sys.stdout.encoding)
您的Unicode输出?否则,请参见;基本上,您需要设置一个环境变量,然后运行您的程序。实际上,使用
LANG=en_-US.utf-8
可以解决这个问题,但由于某些原因,我不能将它与
os.system(“LANG=en_-US.utf-8”)
子进程调用(“LANG=en_-US.utf-8”,shell=True)
子进程.Popen(“LANG=en_-US.utf-8”,shell=True)一起使用
这是因为它不是可执行文件。你说得对
LANG
实际上是一个环境变量,我试图在Python脚本中更改它的值。我尝试使用
env
作为
Popen()
的参数。它返回
0
。我重新表述了问题及其细节,以澄清我的需要。
subprocess.call(“export LANG=en_US.utf-8”,shell=True)
将启动子进程,为子进程设置环境,然后终止子进程。它不会有任何影响-您不能从子进程更改环境。为什么不直接
.encode(sys.stdout.encoding)
您的Unicode输出?否则,请参见;基本上,您需要设置一个环境变量,然后运行您的程序。实际上,使用
LANG=en_-US.utf-8
可以解决这个问题,但由于某些原因,我不能将它与
os.system(“LANG=en_-US.utf-8”)
子进程调用(“LANG=en_-US.utf-8”,shell=True)
子进程.Popen(“LANG=en_-US.utf-8”,shell=True)一起使用
这是因为它不是可执行文件。你说得对
LANG
实际上是一个环境变量,我试图在Python脚本中更改它的值。我尝试使用
env
作为
Popen()
的参数。它返回
0
。我重新表述了问题及其细节,以澄清我需要什么。
subprocess.cal