Как запустить команду 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
Другие вопросы по тегам