假设您有一个字符串生成,通过os.urandom(24),
b'\x1b\xba\x94(\xae\xd0\xb2\xa6\xf2f\xf6\x1fI\xed\xbao$\xc6D\x08\xba\x81\x96v'
Run Code Online (Sandbox Code Playgroud)
并且你想将它存储在环境变量中,
export FOO='\x1b\xba\x94(\xae\xd0\xb2\xa6\xf2f\xf6\x1fI\xed\xbao$\xc6D\x08\xba\x81\x96v'
Run Code Online (Sandbox Code Playgroud)
并使用从Python程序中检索值os.environ.
foo = os.environ['FOO']
Run Code Online (Sandbox Code Playgroud)
问题是,这里foo有字符串文字值'\\x1b\\xba\\x94...而不是字节序列b'\x1b\xba\x94....
什么是正确export使用的值来使用,或手段os.environ对待FOO作为一个字节串?
您可以使用以下命令在 Python 中“取消转义”您的字节:
import os
import sys
if sys.version_info[0] < 3: # sadly, it's done differently in Python 2.x vs 3.x
foo = os.environ["FOO"].decode('string_escape') # since already in bytes...
else:
foo = bytes(os.environ["FOO"], "utf-8").decode('unicode_escape')
Run Code Online (Sandbox Code Playgroud)
还有一个选项,只需在Bash中将其设置为二进制数据即可.这使用ANSI字符串引用:
export FOO=$'\x1b\xba\x94(\xae\xd0\xb2\xa6\xf2f\xf6\x1fI\xed\xbao$\xc6D\x08\xba\x81\x96v'
Run Code Online (Sandbox Code Playgroud)