Страницы

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

вторник, 30 октября 2018 г.

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

Добрый день. С питоном знаком не так давно. Уже не первый день бьюсь с такой задачей: Необходимо вызвать командную стоку windows, отправить команду (например ipconfig) Затем полученный результат сохранить в notepad. Пробовал через pywinauto/ subprocess, к сожалению дальше вывода cmd экран продвинуться не смог. Подскажите, как можно реализовать, или в каком направлении искать :-) Заранее спасибо.


Ответ

Чтобы получить результат команды как строку, не обязательно 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').

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

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