我遇到了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自动转义环境变量?
答案 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"
。