Страницы

Поиск по вопросам

четверг, 12 декабря 2019 г.

Python Взаимодействие с cmd.exe

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

Комментариев нет:

Отправить комментарий