Выполнение команды cmd и запись вывода в переменную

Я хочу сделать что бы при запуске программы выполнялась консольная команда (dir, ipconfig и т.д.), и дальше результат записывался бы в переменную. Сейчас у меня такой код

import ctypes
import os
import subprocess

encoding = os.system("dir C:\ ")
text = subprocess.check_output('dir', encoding=str(encoding))
print(text)

И выдает:

 Том в устройстве C не имеет метки.
 Серийный номер тома: 445C-DDBC

 Содержимое папки C:\


           *тут содержимое папки*



Traceback (most recent call last):
  File "C:\Users\Grashasa\Desktop\my_little_trojan\files\test.py", line 6, in <module>
    text = subprocess.check_output('dir', encoding=str(encoding))
  File "C:\Users\Grashasa\AppData\Local\Programs\Python\Python310\lib\subprocess.py", line 420, in check_output
    return run(*popenargs, stdout=PIPE, timeout=timeout, check=True,
  File "C:\Users\Grashasa\AppData\Local\Programs\Python\Python310\lib\subprocess.py", line 501, in run
    with Popen(*popenargs, **kwargs) as process:
  File "C:\Users\Grashasa\AppData\Local\Programs\Python\Python310\lib\subprocess.py", line 958, in __init__
    self.stdout = io.TextIOWrapper(self.stdout,
LookupError: unknown encoding: 0

То есть оно выводит, но не записывает в переменную.


Ответы (2 шт):

Автор решения: Sergey

Мне проще для линуха. Там это выглядит как-то так:

import subprocess

completed = subprocess.run(['ls', '-1', '/home/lary/'],stdout=subprocess.PIPE,)

print('returncode:', completed.returncode)

print('Have {} bytes in stdout:Xn{}'.format(len(completed.stdout), completed.stdout.decode('utf-8')))

Понятно, что вместо /home/lary/ Вы должны подставить что-то своё.

→ Ссылка
Автор решения: Nikita

Так работает

import subprocess

text = subprocess.check_output(['cmd', '/c', '''dir C:\ '''])
print(text)
→ Ссылка