Как запускать команды внутри приглашения mininet, используя скрипты Python извне

Я новичок в мининете. Я хочу запустить команды mininet для запуска из сценариев Python, таких как «узлы», «дамп». Я могу создать топологию, но не могу использовать эти команды через свой скрипт. Я использую Убунту 14.04.

import subprocess as sb
import os
print "Single Switch and 4 Hosts per switch topology"
print "Creation of topology"
os.system(" sudo mn --topo = single,4",shell=True)
os.system("nodes")

Ошибка:

sh: 1: nodes: not found
32512

Я не хочу создавать топологию с помощью скрипта Python, я хочу использовать только команды mininet.


person user7369931    schedule 13.03.2017    source источник
comment
mininet имеет pythonic API. Есть ли причина, по которой вы хотите вызвать его с помощью bash?   -  person nir0s    schedule 13.03.2017


Ответы (3)


Проблема в том, что мининет — это интерактивный интерфейс командной строки. Вы не можете просто вызвать его, а затем передать другую команду, так как интерактивный интерфейс командной строки блокирует.

Есть способы решить эту проблему. Посмотрите здесь: Обертка интерактивного интерфейса командной строки в python

и отметьте pexpect для более удобного взаимодействия с интерактивными интерфейсами командной строки.

person nir0s    schedule 13.03.2017

Как предложил nirOs, вы должны использовать библиотеку Mininet Python. Прочтите https://github.com/mininet/mininet/wiki/Introduction-to-Mininet, чтобы лучше понять, как создавать топологии. После создания вы можете использовать hostObject.cmd('ваша команда идет сюда') . Каждый хост в мининете создается со своим собственным пространством имен. Этот «cmd» выполняет данную команду в пространстве имен хоста. Например: host1.cmd("ifconfig") #это возвращает информацию об IP-адресе хоста.

person Abhimanyu singh    schedule 13.03.2017

Рад, что нашел этот вопрос. У меня есть подвопрос очень похожего характера. Я понимаю, что вы можете выполнить команду в интерфейсе командной строки mininet из python, используя, например. h1.cmd('ifconfig'), но есть ли способ сделать то же самое с python на приглашение mininet>? т. е. не указывая его на конкретный хост в топологии (я имитирую отказы, поэтому некоторые хосты отключены). Что-то вроде net.cmd('python module.py') ? @Абхиманью Сингх @nir0s

person Ahmed Ayman Ibrahim    schedule 31.03.2017
comment
Я предлагаю вам задать это как новый вопрос. С конкретными примерами того, что вы хотите сделать. - person Abhimanyu singh; 01.04.2017
comment
@ Ахмед, ты нашел ответ на вопрос? - person Mahdi Firouzjaah; 19.01.2021