Как запустить команду bash 'tc' в Python?
Я хочу, чтобы мы контролировали трафик ядра Linux с помощью Python для имитации потерянных, поврежденных и дублированных пакетов. Я уже могу настроить это с помощью терминала Linux, но я должен использовать Python.
bash cmd работает:
tc filter show dev eth1
Python не работает:
>>> subprocess.call(["tc", "filter", "show", "dev", "eth1"])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.6/subprocess.py", line 470, in call
return Popen(*popenargs, **kwargs).wait()
File "/usr/lib/python2.6/subprocess.py", line 623, in __init__
errread, errwrite)
File "/usr/lib/python2.6/subprocess.py", line 1141, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory
Благодарю.
2 ответа
Решение
Подпроцесс python не знает о вашей оболочке. Так что предоставьте абсолютный путь к вашей команде, что-то вроде:
subprocess.call(["/sbin/tc", "filter", "show", "dev", "eth1"])
найти точное местоположение с помощью команды which tc
в твоей раковине.
Основной способ, если вам не нужен особый контроль, это использовать os.system()
чтобы запустить команду, как если бы вы были в командной строке вашей оболочки (не нужно указывать полный путь, если в вашем $PATH):
import os
os.system("tc filter show dev eth1")
Это должно работать точно так же, как если бы вы делали это в вашем cmd:
$ tc filter show dev eth1