Я новичок в Python. Существует мой вопрос:Почему существует странное форматирование из подпроцесса.Popen с командой оболочки?
а) ShellHelper.py:
import subprocess
def execute_shell(shell):
process = subprocess.Popen(shell, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
output = process.communicate()[0]
exit_code = process.returncode
if exit_code == 0:
return output
else:
raise Exception(shell, exit_code, output)
б) Launcher.py
from ShellHelper import *
command = input("Enter shell command: ")
out = execute_shell(command)
print(out.split())
с) Мой терминал:
pc19:AutomationTestSuperviser F1sherKK$ python3 Launcher.py
Enter shell command: ls
[b'Launcher.py', b'ShellHelper.py', b'__pycache__']
- Почему Я получаю это странное форматирование, как
b'
перед каждым файлом? - Нужно ли это перечислять?
- Нужно ли мне еще форматировать, так что это явная строка?
2) Вы сделали это list, выполнив 'out.split()' – TemporalWolf
. Вы используете Python 3, где все строки - это строки unicode (каждый символ равен 2 байтам). Префикс 'b' перед строкой означает, что строка является байтовой строкой (каждый символ равен 1 байт). Это потому, что система возвращает bytestring, и она не работает «изначально» в unicode, как это делает python. – Zizouz212
О 'split' было непреднамеренно. Я не заметил. Я хотел «полоса» там. – F1sher