来自python os.system的错误答案`RTNETLINK答案:没有这样的文件或目录`



我正在尝试将bash脚本移植到python。bash脚本运行一个tc命令来模拟慢速网络,主要部分如下:

tc class add dev wlp1s0 parent 1:1 classid 1:12 htb rate 0.5mbps &&
tc qdisc add dev wlp1s0 parent 1:12 netem delay 300ms loss 2%

脚本"just"作为sudo运行。

python中完全相同的行失败了,它们看起来像这样:

>>> import os
>>> os.system("sudo tc class add dev wlp1s0 parent 1:1 classid 1:12 htb rate 0.5mbps")
RTNETLINK answers: No such file or directory
512
>>> os.system("sudo tc qdisc add dev wlp1s0 parent 1:12 netem delay 300ms loss 2%")
RTNETLINK answers: No such file or directory
512

在类似的问题中,人们认为缺少内核模块,我发现这种情况有所不同,因为tc命令在从终端运行时工作得很好。python本身似乎缺少了一些能够正确运行它的东西。欢迎任何建议或链接。谢谢

更新:

经过更多的阅读和注释中的指针,我现在已经更新了脚本以使用subprocess.call()。这应该取代os.system调用,但不会对我手头的问题造成任何更改。

>>> import subprocess
>>> subprocess.call("tc class add dev wlp1s0 parent 1:1 classid 1:12 htb rate 1.2mbit", shell=True)
RTNETLINK answers: No such file or directory
2

tc不能正常使用sudo,您应该使用python作为根运行另一个python文件

主文件

import os
os.system("sudo python otherScript.py")

otherScript.py

import os
os.system("{tc command}")...

最新更新