Ausgabe eines Python-Scriptes anpassen

FatManStanding

Lt. Junior Grade
Registriert
Aug. 2021
Beiträge
385
tach,

ich kann nur etwas mit der shell unter linux umgehen, mit python programmieren kann ich nicht. mit diesem script kann ich mir die aktuelle übertragungsrate von der fritzbox ausgeben lassen:

Code:
import time
from fritzconnection.lib.fritzstatus import FritzStatus

fc = FritzStatus(address='192.168.178.1', password='password')
while True:
        print(fc.transmission_rate)
        time.sleep(2)

die ausgabe erfolgt im format

Code:
(11111, 1111111)

als erstes die up- dann die downloadrate. ich will die werte jetzt auf die reine zahl zurecht stutzen. in der shell würde ich das vielleicht mit 'tr' (zum löschen der klammern) und dann 'cut' um die werte zu trennen. problem: wenn ich das scritp in einem terminal ausgeben und tr nutze bekomme ich keinen output mehr.

Code:
python3 script.py | tr -d '('

ich vemrute das liegt daran, dass das script in einer endlosschleife läuft und nicht nur einmal etwas ausgibt. kann ich das auch in der shell lösen oder müsste das schon im python-script passieren?
 
Zuletzt bearbeitet:
machs in Python.

so in etwa

Python:
import time
from fritzconnection.lib.fritzstatus import FritzStatus

fc = FritzStatus(address='192.168.178.1', password='xxxxx‘)
while True:
    s = fc.transmission_rate
    s = s.strip('()')   # () entfernen
    num_list = s.split(',')   # an "," trennen
    num_list = [int(n.strip()) for n in num_list]   # Leerzeichen entfernen und zu Zahl machen
    print(num_list) # gibt da Array in der Form [1111, 1111] aus
    time.sleep(2)

warum willst du das skript überhaupt in der Shell aufrufen wenn es als Endlosschleife läuft?
 
Zuletzt bearbeitet:
Python:
print(fc.transmission_rate[0], fc.transmission_rate[1])
 
  • Gefällt mir
Reaktionen: pvcf und blöderidiot
@spcqike da kommt ein tuple zurück, kein grund für stringmanipulationen:

Python:
import time
from fritzconnection.lib.fritzstatus import FritzStatus

fc = FritzStatus(address='192.168.178.1', password='my_password')
while True:
        up, down = fc.transmission_rate
        print(f"up/down: {up}/{down}")
        time.sleep(2)
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: Geckoo, up.whatever, IBISXI und 3 andere
der vorschlag von beneee geht so, ich habe aber probleme das weiter zu verarbeiten. wenn ich versuche den output über shell in eine datei auszugeben bekomme ich ca. 10 zeilen, dann wird nichts mehr in die datei geschrieben:

Code:
python3 script.py > datei.txt

wie kann ich das in python in eien datei ausgeben? am besten begrenzt auf 10 zeilen.
 
FatManStanding schrieb:
wie kann ich das in python in eien datei ausgeben? am besten begrenzt auf 10 zeilen.
Python:
import time
from fritzconnection.lib.fritzstatus import FritzStatus


fc = FritzStatus(address='192.168.178.1', password='my_password')

with open("log.txt", "w") as f:
    for i in range(10):
        up, down = fc.transmission_rate
        f.write(f"up/down: {up}/{down}\n")
        time.sleep(2)

die log-datei wird bei jedem starten überschrieben.
 
Zurück
Oben