禁用环境变量的python自动转义

时间:2013-12-11 15:00:19

标签: python

我遇到了python的以下问题,用于生成 Linux上正在读取的文件。 Python是自动转义的 字符串,因此当写入文件时,它们是不正确的。

在我的shell中,我将环境变量设置为UNC路径:

camd011> setenv python_error "\\\\a\\b\\c"
camd011> echo $python_error 
\\a\b\c

然后我在python中检索它,因为它将用于生成C代码 和#include指令。但是当我在python中检索值时:

camd011> python
Python 1.6.1 (#1, Oct 17 2013, 15:08:20)  [GCC 4.4.7 20120313 (Red Hat 4.4.7-3)] on linux2
Copyright (c) 1995-2001 Corporation for National Research Initiatives.
All Rights Reserved.
Copyright (c) 1991-1995 Stichting Mathematisch Centrum, Amsterdam.
All Rights Reserved.
>>> import os
>>> value = os.environ['python_error']
>>> value
'\\\\\\\\a\\\\b\\\\c'

正如您在上面所看到的,它已被自动转义,因此当我将其写入文件时:

>>> f = open("temp.txt", "w")
>>> f.write(value)
>>> f.close()

我最终得到的是双斜线,而不是合适的UNC路径和代码 现在无法编译。文件:

\\\\a\\b\\c

即。代码包含#include,现在失败了:

#include "\\\\a\\b\\c\file.h"

如何阻止python自动转义环境变量?

1 个答案:

答案 0 :(得分:1)

这似乎是tcsh中引用和取消引用的问题。它与Python无关 - Python获取的变量可以使用env命令打印出来。

似乎在tcsh中,echo $FOO在打印前取消引用$FOO的值。这似乎误导了你环境变量中的真实内容,所以你添加了额外的引用层。

unaha-closp:~> setenv FOO "\\hello\world"
unaha-closp:~> echo $FOO
\hello\world
unaha-closp:~> env | grep FOO
FOO=\\hello\world
unaha-closp:~> python
Python 2.7.3 (default, Sep 26 2013, 20:03:06)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> print os.environ["FOO"]
\\hello\world
>>>
unaha-closp:~> bash
svk@unaha-closp:~$ echo $FOO
\\hello\world

正确的setenv命令应该只是setenv python_error "\\a\b\c"