【问题标题】:Bad answer from python os.system `RTNETLINK answers: No such file or directory`python os.system 的错误答案`RTNETLINK 答案:没有这样的文件或目录`
【发布时间】: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


【解决方案1】:

tc 不能用 sudo 正常工作,你应该使用 python 以 root 运行另一个 python 文件

主文件

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

otherScript.py

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

【讨论】:

  • 我无法让 tc 在我的电脑上工作,不知道发生了什么
  • tc 不支持 1:1 或 1:12,请改用 1 或 2 或 1 或 12
  • 嗨@mjz19910,你能详细说明你的答案吗?您不需要熟悉 tc ,我只是不明白为什么您的建议与我现在的建议不同。无论如何,我以相同的结果尝试了您的建议。但想知道您是否可以进一步解释为什么您认为这是解决方案。
  • 请确保您先modprobe sch_htb,否则tc 将无法工作,一旦您这样做了,请回复我,然后我们可以检查更多,除此之外,您可以使用任何一种方法,我不认为我可以从中得出答案,所以您可以尝试一下,让我知道它是否有效。
猜你喜欢
  • 1970-01-01
  • 2011-06-15
  • 2011-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多