我希望我们使用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
感谢。
答案 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