Выполнение команды 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)