我有一个包含以下内容的文件。
[oracle@hostname POST_DB_REFRESH_VALIDATIONS]$ cat .DB_Creds.txt
DEW:SYSTEM:ss2021:NPDOR
STW:SYSTEM:ss2021:NPDOR
当我在shell中运行以下命令时,我得到的输出是SYSTEM
[oracle@hostname POST_DB_REFRESH_VALIDATIONS]$ grep DEW .DB_Creds.txt | awk -F':' '{print $2}'
SYSTEM
而当我在python3命令行中使用subprocess
运行相同的程序时,我得到的输出如下。
Python 3.6.8 (default, Sep 26 2019, 11:57:09)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-39)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import subprocess
>>> output = subprocess.check_output("grep DEW .DB_Creds.txt | awk '{print $2}'", shell=True)
>>> print(output)
b'SYSTEMn'
我只希望它是SYSTEM,而不是任何其他特殊字符。
output
的类型为bytes
。您希望首先将其解码为类型为str
的值,然后去掉后面的换行符。
>>> print(output.decode().strip())
SYSTEM
您可以观察到方法调用所产生的差异:
>>> output
b'SYSTEMn'
>>> output.decode()
'SYSTEMn'
>>> output.decode().strip()
'SYSTEM'
默认情况下,decode
将bytes
值视为字符串的UTF-8编码,但这种假设是有效的,因为您有纯ASCII文本。