pingparsing icon indicating copy to clipboard operation
pingparsing copied to clipboard

AttributeError: NoneType ... (example code not working)

Open laundmo opened this issue 5 years ago • 10 comments

hey there, im using a slightly modified version of the example library code

my code:

import json
import pingparsing

ping_parser = pingparsing.PingParsing()
transmitter = pingparsing.PingTransmitter()
transmitter.destination = "google.com"
transmitter.count = 1
result = transmitter.ping()
print("Pingparsing Result: \n")
print(result)
print("\njson.dumps: \n")
print(json.dumps(ping_parser.parse(result).as_dict(), indent=4))

and im getting a really weird result and then a NoneType error when trying to use the json.dumps....

Pingparsing Result:

PingResult(stdout='\xa0,ÈÑÎÁ\x80ä?ÀÁø/ÅÁ\x9a\x80\x94\x93\x04\x06\r\x8e\r\x8e&Ñ>Å\x80ÏÑÊÀ\x80/ÍËÅÁÃaÇÊÈ\x80ÃaÊ\x80Å??Å%Á\x06Ä?_\x80$\x16\x91\x96\x06\x95\x98\x06\x16\x91\x90\x06\x91\x94)\x80_ÑÈ\x80\x93\x16\x80â`ÈÁË\x80à/ÈÁ>\x9a\r\x8e\xa0>ÈÏ?ÊÈ\x80Î?>\x80\x16\x91\x96\x06\x95\x98\x06\x16\x91\x90\x06\x91\x94\x9a\x80â`ÈÁË\x15\x93\x16\x80!ÁÑÈ\x15\x16\x04_Ë\x80èè<\x15\x95\x96\r\x8e\r\x8e&Ñ>Å\x05ëÈ/ÈÑËÈÑ,\x80ÃaÊ\x80\x16\x91\x96\x06\x95\x98\x06\x16\x91\x90\x06\x91\x94\x9a\r\x8e\x80\x80\x80\x80&/,ÁÈÁ\x9a\x80åÁËÁ>ÀÁÈ\x80\x15\x80\x91\x8c\x80á_øÃ/>ÅÁ>\x80\x15\x80\x91\x8c\x80îÁÊ%?ÊÁ>\x80\x15\x80\x90\r\x8e\x80\x80\x80\x80\x88\x90\n\x80îÁÊ%ÍËÈ\x89\x8c\r\x8eä/\x06\x80!ÁÑÈ/>Å/ÂÁ>\x80Ñ>\x80(Ñ%%ÑËÁ,\x06\x9a\r\x8e\x80\x80\x80\x80(Ñ>Ñ_Í_\x80\x15\x80\x16\x04_Ë\x8c\x80(/ÌÑ_Í_\x80\x15\x80\x16\x04_Ë\x8c\x80(ÑÈÈÁ%ÏÁÊÈ\x80\x15\x80\x16\x04_Ë\r\x8e', stderr='', returncode=0)

json.dumps:

Traceback (most recent call last):
  File "c:/Users/lauri/python-projects/graph-ping/test.py", line 12, in <module>
    print(json.dumps(ping_parser.parse(result).as_dict(), indent=4))
AttributeError: 'NoneType' object has no attribute 'as_dict'

mind you, i get the same error when running the exact example from https://pingparsing.readthedocs.io/en/latest/pages/usage/library.html#execute-ping-and-parse-the-result

laundmo avatar May 11 '19 11:05 laundmo

Thank you for your report.

Probably the error caused by your locale setting. Your code and the example works fine with my environment (English locale). Please try to set your locale to English and re-execute.

thombashi avatar May 11 '19 16:05 thombashi

how do i set the locale? ivr tried all things i can think of, i even made a SuperUser thread asking, but nothing seems to work @thombashi

https://superuser.com/questions/1435601/change-cmd-language-permanently-to-english-windows10-specifically-ping-output

laundmo avatar May 11 '19 16:05 laundmo

chcp 437 would change the locale to English for my Windows environment. I am not so sure why that not works for your environment. How about chcp 65001 (UTF-8)?

thombashi avatar May 11 '19 17:05 thombashi

nope! still german..

laundmo avatar May 11 '19 17:05 laundmo

Thank you for confirmation.

I might possible to add German support in the future if you kindly provide me the following ping results:

1. Success case

Text version of your screenshot would be enough.

2. Failed case

Like the below, a ping result for an unknown destination:

Pinging 192.168.207.100 with 32 bytes of data:
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Ping statistics for 192.168.207.100:
    Packets: Sent = 4, Received = 0, Lost = 4 (100% loss),

thombashi avatar May 14 '19 12:05 thombashi

success

Microsoft Windows [Version 10.0.17134.706]
(c) 2018 Microsoft Corporation. All rights reserved.

C:\WINDOWS\system32>ping 1.1.1.1

Ping wird ausgeführt für 1.1.1.1 mit 32 Bytes Daten:
Antwort von 1.1.1.1: Bytes=32 Zeit=12ms TTL=59
Antwort von 1.1.1.1: Bytes=32 Zeit=12ms TTL=59
Antwort von 1.1.1.1: Bytes=32 Zeit=12ms TTL=59
Antwort von 1.1.1.1: Bytes=32 Zeit=12ms TTL=59

Ping-Statistik für 1.1.1.1:
    Pakete: Gesendet = 4, Empfangen = 4, Verloren = 0
    (0% Verlust),
Ca. Zeitangaben in Millisek.:
    Minimum = 12ms, Maximum = 12ms, Mittelwert = 12ms

C:\WINDOWS\system32>

failure

Microsoft Windows [Version 10.0.17134.706]
(c) 2018 Microsoft Corporation. All rights reserved.

C:\WINDOWS\system32>ping 1.1.1.1

Ping wird ausgeführt für 1.1.1.1 mit 32 Bytes Daten:
Zeitüberschreitung der Anforderung.
Antwort von 192.168.178.1: Zielnetz nicht erreichbar.
Zeitüberschreitung der Anforderung.
Zeitüberschreitung der Anforderung.

Ping-Statistik für 1.1.1.1:
    Pakete: Gesendet = 4, Empfangen = 1, Verloren = 3
    (75% Verlust),

C:\WINDOWS\system32>

the failure was mostly timeout but in between there was a response with the message that the host couldn't be reached

laundmo avatar May 14 '19 19:05 laundmo

Thank you for your information. The enhancement might take some time.

thombashi avatar May 16 '19 14:05 thombashi

any new information about german implemantation?

Deretaz avatar Apr 19 '21 12:04 Deretaz

This hasn't progressed much

thombashi avatar Jun 06 '21 03:06 thombashi

Running into the same problem (also on a German Windows machine), I spent some time in the debugger to find the root of the problem, thinking it might be an easy fix. Here are some observations:

  • The garbled stoud text is a result of mbstrdecoder falsely assuming that the output of the ping command ist "utf-16". If __CODECS is modified so that "cp850" is above "utf-16", the conversion works as needed.
    mbstrdecord's strategy of decoding by iterating over a list of codecs is inherently flawed. It is almost guaranteed that a wrong codec will be used.
    It might be possible to get the right encoding by parsing the result of the chcp command (in my case, it returns Aktive Codepage: 850.).
  • After that workaround, there is still the matter of adapting the parser to a different language. A quick and dirty conversion from English to German got me pretty far, but for true multi language support, a more general (and flexible) solution would have to be implemented.

That's where I stopped and decided that for my purposes, a language agnostic ping library like ping3 or icmplib better fit the bill.

piepero avatar Jan 13 '23 08:01 piepero