2016-05-06 3 views
0

Ich versuche, ein Bash-Skript nach Python zu portieren. Die Bash-Skript läuft ein tc Befehl langsames Netzwerk zu simulieren, geht Hauptbitleitung wie folgt aus:Schlechte Antwort von Python os.system `RTNETLINK antwortet: Keine solche Datei oder Verzeichnis`

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% 

Das Skript „nur“ funktioniert wie sudo ausgeführt wird.

exakt die gleichen Zeilen in Python versagen, sind sie wie folgt aussehen:

>>> 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 

In ähnlichen Fragen, die Menschen ein Kernel-Modul schlägt fehlt, finde ich diese Situation anders, da der tc Befehl perfekt, wenn Lauf funktioniert von einem Terminal. Es scheint, als ob Python selbst etwas vermisst, um es richtig ausführen zu können. Alle Vorschläge oder Links sind sehr willkommen. Vielen Dank!

UPDATE:

Nach etwas mehr lesen und einen Zeiger aus den Kommentaren ich jetzt das Skript aktualisiert haben subprocess.call() zu verwenden. Dies soll os.system Anrufe ersetzen, aber verursacht keine Änderung an meinem Problem zur Hand.

>>> 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 
+0

Bitte bitte ausführen benutze 'subprocess' anstelle von veraltetem' os.system' .. – heemayl

+0

Hi @heemayl Ich folgte deinem Rat mit dem gleichen Ergebnis lts. 'subprocess.call (selbe_command, shell = True)' mit der gleichen Ausgabe: 'RTNETLINK antwortet: Keine solche Datei oder Verzeichnis' – keponk

Antwort

0

tc funktioniert nicht richtig mit sudo, sollten Sie verwenden Python eine andere Python-Datei als root

Hauptdatei

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

otherScript.py

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

Ich kann tc überhaupt nicht auf meinem Computer arbeiten, weiß nicht, was los ist – mjz19910

+0

tc unterstützt nicht 1: 1 oder 1:12, verwenden Sie 1 oder 2 oder 1 oder 12 statt – mjz19910

+0

hi @ mjz19910, können Sie auf Ihre Antwort näher eingehen? du brauchst dich nicht mit 'tc' auskennen, ich verstehe einfach nicht, warum dein Vorschlag anders ist als das, was ich gerade habe. Auf jeden Fall habe ich deinen Vorschlag mit den gleichen Ergebnissen versucht. Aber ich fragte mich, ob Sie weiter erklären könnten, warum Sie denken, dass dies die Lösung ist. – keponk