В настоящее время я запускаю эксперимент с Mininet-Wifi. Это CLI - это модуль Python Cmd, и я могу получить точную информацию о моделируемой сетевой среде. Симулятор работает как собственный процесс: sudo python на Ubuntu 14.04 или новее.Как подключить вход/вывод класса cmd класса Python к другому процессу Python?
Пульт дистанционного управления для этой сети - POX. На этот раз работает только скрипт; все автоматизировано с помощью предустановленных команд - не более человеческого взаимодействия. То, что я хотел бы сделать, это: процесс POX должен вводить команды в процесс Mininet и извлекать результаты выполнения этой команды. Это связано с тем, что логика POX должна постоянно запрашивать состояние сети через Mininet, чтобы иметь возможность принимать решения. Когда решение принято, POX должен снова ввести команду в процесс Mininet, чтобы изменить состояние сети.
ДОПОЛНЕНИЕ: В настоящее время, я только в состоянии получить доступ к хостам, которые порожденные Mininet, когда я бегу SUDO питона a_mininet_script, благодаря функции полезности называется м. После нереста хозяев Mininet вводит функцию CLI, с которой я хочу общаться, но не могу. Это функция Mininet's m.
#!/bin/bash
# Attach to a Mininet host and run a command
if [ -z $1 ]; then
echo "usage: $0 host cmd [args...]"
exit 1
else
host=$1
fi
pid=`ps ax | grep "mininet:$host$" | grep bash | grep -v mnexec | awk '{print $1};'`
if echo $pid | grep -q ' '; then
echo "Error: found multiple mininet:$host processes"
exit 2
fi
if [ "$pid" == "" ]; then
echo "Could not find Mininet host $host"
exit 3
fi
if [ -z $2 ]; then
cmd='bash'
else
shift
cmd=$*
fi
cgroup=/sys/fs/cgroup/cpu/$host
if [ -d "$cgroup" ]; then
cg="-g $host"
fi
# Check whether host should be running in a chroot dir
rootdir="/var/run/mn/$host/root"
if [ -d $rootdir -a -x $rootdir/bin/bash ]; then
cmd="'cd `pwd`; exec $cmd'"
cmd="chroot $rootdir /bin/bash -c $cmd"
fi
cmd="exec sudo mnexec $cg -a $pid $cmd"
eval $cmd
Например, для доступа к терминалу h1 с любого терминала, а не из сценария ЧО, я бы назвал это так:
sh m h1 ifconfig
Но назвать его из подпроцесса было бы:
p = subprocess.Popen('echo my passwd | sudo -kS sh m h1 ifconfig', shell = True)
чтобы повторить свой вопрос, я хочу общаться с CLI процесса Mininet от контроллера POX, а не только порожденных хостов.