Здравствуйте! Помогите. Нужна помощь: Цель программы - поиск mac адреса через cmd.exe при помощи команды arp -a, и последующим копированием результата (полностью) в файл. Я предполагаю что запуск cmd.exe и последующий ввод команды arp -a возможно реализовать через библиотеку os и аргумент (я предполагаю что arp -a это аргумент при запуске cmd.exe). Проблема в моем незнании того, как я могу запустить cmd с аргументом (arp -a), и получить вывод в файл.
3 Answers
Если команда не является внутренней (вроде ASSOC), то нет нужды как правило запускать cmd.exe, чтобы получить вывод внешней программы в Питоне.
Вместо этого напрямую запускайте программу. К примеру, чтобы перенаправить стандартный вывод arp -a команды в txt файл:
#!/usr/bin/env python3
import subprocess
with open('результат.txt', 'wb', 0) as file:
subprocess.run('arp -a', stdout=file, check=True)
На Windows, команда и её аргументы передаются как строка (родной интерфейс). Переносимый код должен использовать список: каждый аргумент как отдельный элемент следовало бы передать: ['arp', '-a']. Если возникли проблемы с кодировкой, то см. Python Взаимодействие с cmd.exe.
Обратите внимание, что cmd.exe не используется для запуска arp.exe.
Если вы хотите запустить команду, которая требует cmd.exe, к примеру dir, то достаточно shell=True передать:
#!/usr/bin/env python3
import subprocess
subprocess.run('dir /A', check=True, shell=True)
- 52,361
Вопрос закрыт, финальный код программы для поиска mac адресов и сохранения в bin файл:
import subprocess
with open('sh$18mc.bin', 'wb', 0) as file:
subprocess.run(r'c:\windows\system32\cmd.exe /C arp -a', stdout=file, check=True)
Спасибо @KitScribe за код открытия команды в cmd.exe, и @jfs за код вывода в файл. Спасибо всем участникам вопроса.
-
Я считаю что на ваш вопрос ответили, и ваш ответ как минимум излишен. Вам стоит его удалить. – Александр Jul 25 '22 at 17:14
Попробуйте
import os
os.startfile(r'c:\Windows\system32\cmd.exe', 'any-arg') #Cmd.exe start-up
В любом случае всегда можно прибегнуть к subprocces и сделать это следующим образом:
import subprocess
subprocess.Popen([r'C:\Windows\system32\cmd.exe', '--some-arg'])
Ну и также есть вариант запустить файл с помощью библиотеки os, но не c помощью startfile:
os.system(r'C:\Windows\system32\cmd.exe -myarg')
-
Мне необходим аргумент arp -a. В 1 случае выдает ошибку: Traceback (most recent call last): File "C:\Users\Artel\Documents\mac_finder.py", line 23, in
os.startfile(r'C:\Windows\System32\cmd.exe', 'arp -a') #Cmd.exe start-up OSError: [WinError 1155] Указанному файлу не сопоставлено ни одно приложение для выполнения данной операции: 'C:\Windows\System32\cmd.exe' – Antony Voron Apr 09 '17 at 20:16 -
-
Не прокатывает... не понимаю почему, но запускается только cmd.exe. Мне нужно, чтобы cmd.exe запускалась с запросом команды arp -a, и я так понимаю что это аргумент? – Antony Voron Apr 09 '17 at 20:25
-
@AntonyVoron окей, а с аргументом dir он как работает? Выводит текущую директорию? – Apr 09 '17 at 20:31
-
Если код запуска с dir выглядит так: os.system(r'C:\Windows\system32\cmd.exe dir'), то нет, запускается cmd.exe с пустым полем ввода. – Antony Voron Apr 09 '17 at 20:33
-
@AntonyVoron окей. А вариант с subprocess?
subprocess.Popen([r'.=cmd.exe', 'dir'])– Apr 09 '17 at 20:40 -
-
Нет. Не знаю почему, но subprocess тоже не работает. Правда я изменил .=cmd.exe на полный путь, как того требовал питон, но не думаю что это сильно сказалось на результате. Не могли бы Вы проверить данный код у вас на компьютере (если конечно у вас Windows), возможно, это проблема сугубо моего ПК. – Antony Voron Apr 09 '17 at 20:46
-
@AntonyVoron да, я имел ввиду
.\cmd.exe. То, что я написал - это опечатка. У меня не Windows и я не думаю, что это проблема вашего ПК. Но я зайду из под компьютера на виндовс. Скоро буду и мы продолжим смотреть что не так – Apr 09 '17 at 20:51 -
12all, чтобы запустить, допустим,
dirчерезcmd, то командная строка должна выглядеть так:cmd /C dir. Ключик/Cозначает "выполнить команду и закрыться". Простоcmd dirилиcmd arpне работают, только с ключом/C. – insolor Apr 09 '17 at 20:57 -
-
-
-
@KitScribe Большое вам человеческое спасибо! Все заработало. Для вывода в txt попробую сам адаптировать. Если возникнут вопросы, продолжу тему. Спасибо всем причастным. – Antony Voron Apr 09 '17 at 21:17
-
@AntonyVoron пожалуйста. Если возникнут вопросы, лучше открывайте новый вопрос. А этот закройте. – Apr 09 '17 at 21:25
-
-
второй параметр у
os.startfile()это операция (к примеру:'open', а не аргумент командной строки дляcmd.exe('any-arg'это неправильная операция). Ни один из вариантов в ответе не сохраняет вывод команды в файл. – jfs Apr 11 '17 at 16:58
C:\Users\Documents>
– Antony Voron Apr 09 '17 at 19:57