如何运行bash' tc' python中的命令?

时间:2014-08-13 13:08:50

标签: python linux trafficshaping

我希望我们使用Python对Linux内核进行流量控制,以模拟丢失,损坏和重复的包。我已经能够使用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 个答案:

答案 0 :(得分:3)

python子进程不了解你的shell环境。因此,为命令提供绝对路径,例如:

subprocess.call(["/sbin/tc", "filter", "show", "dev", "eth1"])

在shell中使用命令which tc查找确切位置。

答案 1 :(得分:0)

如果您不需要任何特殊控制,基本方法是使用os.system()启动命令,就像您在shell命令行中一样(如果在$中,则无需指定完整路径) PATH):

import os
os.system("tc filter show dev eth1")

这应该像在你的cmd中一样工作:

$ tc filter show dev eth1