【发布时间】:2016-08-31 23:36:05
【问题描述】:
我正在尝试将 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 本身缺少一些能够正确运行它的东西。
欢迎任何建议或链接。谢谢!
更新:
经过更多阅读和来自 cmets 的指针后,我现在更新了脚本以使用 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
【问题讨论】:
-
请使用
subprocess而不是已弃用的os.system.. -
嗨@heemayl 我听从了你的建议,得到了同样的结果。
subprocess.call(same_command, shell=True)输出相同:RTNETLINK answers: No such file or directory
标签: python linux bash subprocess