Присвоить значение вывода командной строки оболочки переменной в python

#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.