#python #windows #python_3x #cmd #subprocess
Добрый день. С питоном знаком не так давно. Уже не первый день бьюсь с такой задачей: Необходимо вызвать командную стоку windows, отправить команду (например ipconfig) Затем полученный результат сохранить в notepad. Пробовал через pywinauto/ subprocess, к сожалению дальше вывода cmd экран продвинуться не смог. Подскажите, как можно реализовать, или в каком направлении искать :-) Заранее спасибо.
Ответы
Ответ 1
Чтобы получить результат команды как строку, не обязательно cmd.exe вызывать, можно напрямую запустить дочерний процесс: import subprocess output = subprocess.check_output('ipconfig') Чтобы "сохранить в notepad", просто в файл пишите результат: from pathlib import Path Path('~/output.txt').expanduser().write_bytes(output) Вместо приведённого пути (сохраняет файл output.txt в домашнюю директорию пользователя), можно специфичную для программы директорию использовать (текущую рабочую директорию или путь относительно скрипта или что appdirs модуль возвращает). Можно за один шаг: вызывать команду и сохранить её результат в файл сразу: with Path('~/output.txt').expanduser().open('wb', 0) as file: subprocess.run('ipconfig', stdout=file, check=True) См. Python - Запуск cmd.exe с аргументом, и последующим сохранением ответа в .txt файл Чтобы сохранить вывод, используя другую кодировку (к примеру, если вы кракозябры видите), необходимо декодировать вывод программы в Unicode, а затем сохранить в кодировке, которую понимает ваше окружение: import ctypes import os encoding = os.device_encoding(1) or ctypes.windll.kernel32.GetOEMCP() text = subprocess.check_output('ipconfig', encoding=encoding) Byte при печати вывода внешней команды. После этого в желаемой кодировке можно сохранить. К примеру, по умолчанию используется locale.getpreferredencoding(False) кодировка: Path('~/output.txt').expanduser().write_text(text) вы можете в write_text() другую кодировку передать (к примеру, encoding='utf-8').Ответ 2
os.system("ipconfig >some-file.txt")Ответ 3
Большое спасибо за помощь. Получившийся работающий код: def ipconf_cmd(): text = subprocess.check_output('ipconfig') decoded = text.decode('cp866') Path('~/output.txt').expanduser().write_text(decoded)
Комментариев нет:
Отправить комментарий