2016-10-04 4 views
-1

Мне нужна помощь Я пытаюсь открыть терминал и набрать ifconfig, а затем прочитать вывод на mac, а затем перевести это позже в kali, но я получаю сообщение об ошибке с файлом пути к терминалу, и я не могу запустите его, вот мой код.Коррекция программы на Python

import os,sys 

#opens terminal 

terminal = os.open('/Applications/Utilities/Terminal.app', os.O_RDWR|os.O_APPEND) 

#writes ifconfig 

os.write(terminal, 'ifconfig') 

os.close(terminal) 

ответ

1

Я предлагаю вам использовать subprocess

import subprocess 

def popen(executable): 
    sb = subprocess.Popen(
     '%s' % executable, 
     shell=True, 
     stdout=subprocess.PIPE, 
     stderr=subprocess.PIPE, 
     universal_newlines=True, 
    ) 
    stdout, stderr = sb.communicate() 
    return stdout, stderr, sb.returncode 

вы можете передать ifconfig этому методу, и он выполнит команду и возвращает выходные данные для вас.

+0

Это особенно хорошая идея, поскольку 'Terminal.app' не является исполняемым; это пакет, который для файловой системы выглядит как каталог. –

+0

Я согласен с использованием подпроцесса, но это устаревший и тяжелый пример. Я бы предложил использовать новый 'run' или, по крайней мере,' call' для чего-то такого тривиального. – CasualDemon

+0

@CasualDemon да, вы также можете использовать 'check_output' – Juggernaut

1

Я согласен с использованием subprocess. Чтобы добавить ответ Амина, для чего-то это просто, что вы просто хотите вывод:

import subprocess 

print(subprocess.check_output(['ifconfig'])) 

Edit:

То, что я говорил в моем комментарии новой run функции, которая возвращает CompletedProcess класса, содержит всю необходимую информацию для вас. Таким образом вам больше не нужно иметь три разные переменные, содержащие ваши stdout, sterr и returncode.

+0

приятная вещь о 'run'. Тпх – Juggernaut

Смежные вопросы