Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.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 在引用的环境变量新行中读取_Python - Fatal编程技术网

Python 在引用的环境变量新行中读取

Python 在引用的环境变量新行中读取,python,Python,我需要读入一个env变量,导出时必须引用该变量 export ENV_QUOTES="cat\nhat" # This is actually a rsa private key export ENV_NO_QUOTES=cat\nhat 当我读入引用的env var时,它不会注册转义的换行符: import os env_var_no_quotes = os.environ['ENV_NO_QUOTES'] env_var = os.environ['ENV_QUOTES'] for idx

我需要读入一个env变量,导出时必须引用该变量

export ENV_QUOTES="cat\nhat" # This is actually a rsa private key
export ENV_NO_QUOTES=cat\nhat
当我读入引用的env var时,它不会注册转义的换行符:

import os
env_var_no_quotes = os.environ['ENV_NO_QUOTES']
env_var = os.environ['ENV_QUOTES']
for idx, v in enumerate(env_var_no_quotes):
    print(idx, v, env_var[idx])
输出:

0 c c
1 a a
2 t t
3 n \
4 h n
5 a h
6 t a
如何让python识别引用的环境变量的换行符?实际输出
print
私钥如下所示:

# Non quoted
-----BEGIN PRIVATE KEY-----
ffaffdsafsdeeekqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCltThZlt88aAn8
f2MlQsV4Nv9TEhBj8WUypfGc148FedpTRraNyE3f9bZ4u4MJC34vI9zuqf5hNrX+
+w+eYrPJwbS4CvA3Ww2znjCfKK4u3n3P522LTGNxAoGBAK5AA0twCSifwIPIlIsZ
psGtFIEJpc6sJ4+LgVzTW/5EwreMHMnx3tQTaVi6pVIJTqjaMJp5SAAUlPrl5zZM
gsVgtwyXMMqlKNt9wMdBH+ir7oJsppC+DjIRbpCa8U6nEG4Wij5qVeRJ8DVV8NAM
C5Tc+6qgzVZRaXXkCStZA/PK
    -----END PRIVATE KEY-----

    # Quoted
-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCltThZlt88aAn8\nf2MlQsV4Nv9TEhBj8WUypfGc148FedpTRraNyE3f9bZ4u4MJC34vI9zuqf5hNrX+\nW+UfXJkPLfemupraI5sTWyFCwX7ZYOd5I7vyRoqSii4MHCXlg8zWySrjwirwou87\nn18zSyA30fu3kuHBDlHFnRVw+Ag+M/XjesRcz5Q+KQ9o/MnpcZcYQ7sZU5GntqCw\n3ZNgb68Cla87jbhvlkjfdN77IcLJypuwCMZeyHeQYNtgxLyE0o2Te5ddAjvD59uS\nML69iuQqpvPjpuBgZnReKX3oZusU/o6qgzVZRaXXkCStZA/PK\n-----END PRIVATE KEY-----\n

如果无法更改shell脚本,将输入指定为正确包含换行符(这是更好的方法!),则只需在Python中使用
string.sub()
,将
r'\n'
(变量实际包含的内容)替换为
'\n'
(这是您想要的):


也就是说,在壳牌方面,考虑:

# in bash or ksh, not POSIX sh
ENV_QUOTES=$'cat\nhat'    # literal newline, not '\' followed by 'n'
……或者

# in any POSIX shell
orig_shell_var='cat\nhat'                 # two characters, '\' then 'n'
ENV_QUOTES=$(printf %b "$orig_shell_var") # evaluated as format string, now has newline
export ENV_QUOTES
# in any POSIX shell
ENV_QUOTES='cat
hat'
……或者

# in any POSIX shell
orig_shell_var='cat\nhat'                 # two characters, '\' then 'n'
ENV_QUOTES=$(printf %b "$orig_shell_var") # evaluated as format string, now has newline
export ENV_QUOTES
# in any POSIX shell
ENV_QUOTES='cat
hat'

您是否以其他方式检查了这些变量中的值,例如,
printenv
实用程序?Python没有问题——您没有在shell中正确分配变量。运行
s=\n;回显“$s”
,您将看到它是一个仅包含
n
的单个字符串。此外,
“\n”
不是shell中的换行符,而是以反斜杠开头的两个字符的字符串。如果要在shell中指定换行符,则需要使用不同的引用形式,即。
$'\n'