#python-3.x #shell #variables #subprocess
#python-3.x #оболочка #переменные #подпроцесс
Вопрос:
У меня есть файл с приведенным ниже содержимым.
[oracle@hostname POST_DB_REFRESH_VALIDATIONS]$ cat .DB_Creds.txt
DEW:SYSTEM:ss2021:NPDOR
STW:SYSTEM:ss2021:NPDOR
Когда я запускаю приведенную ниже команду в оболочке, я получаю точный вывод как 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, а не с какими-либо другими специальными символами.
Ответ №1:
output
имеет тип bytes
. Вы хотите сначала декодировать это значение в значение type str
, а затем удалить завершающий символ новой строки.
>>> print(output.decode().strip())
SYSTEM
Вы можете наблюдать различия, вызванные вызовами методов:
>>> output
b'SYSTEMn'
>>> output.decode()
'SYSTEMn'
>>> output.decode().strip()
'SYSTEM'
decode
bytes
по умолчанию значение обрабатывается как кодировка строки в формате UTF-8, но это предположение справедливо, поскольку у вас есть обычный текст ASCII.