首先,我想说的是,我正在用Python做我真正的第一步。 我正在尝试在自动化测试中使用python3ping。我的问题是,我没有任何python方面的经验,也不知道如何操作我不熟悉的.py文件。 我尝试使用以下方法:
result = ping.verbose_ping('10.0.1.135', count=3)
但是,我打印了结果,结果返回“无”。 我希望能够解析平.py脚本:
PYTHON PING 10.0.1.135 (10.0.1.135): 64 data bytes
64 bytes from 10.0.1.135: icmp_seq=0 ttl=64 time=0 ms
64 bytes from 10.0.1.135: icmp_seq=1 ttl=64 time=0 ms
64 bytes from 10.0.1.135: icmp_seq=2 ttl=64 time=0 ms
----10.0.1.135 PYTHON PING Statistics----
3 packets transmitted, 3 packets received, 0.0% packet loss
round-trip (ms) min/avg/max = 0/0.7/0
例如,我的一个计划是“捕获”最后一行并告诉接收的数据包数或数据包丢失百分比
>>> dir(result)
['__bool__', '__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__form
at__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__',
'__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__se
tattr__', '__sizeof__', '__str__', '__subclasshook__']
首先,我想说的是,你选择的库自2014年以来就没有更新过,从源代码来看,它写得不好(在我看来像Java),而且没有一个真正的API可以使用,因为所有的方法都只是打印输出,不返回输出。所以我真正的建议是-不要使用它。你知道吗
考虑到这一点,如果必须使用它,真正的问题是如何从第三方标准输出中获得输出?如果您使用的是python3.4及更高版本,那么可以使用内置的
redirect_stdout
。下面是一个代码示例:现在由您决定如何处理
ping_lines
列表中每一行的解析。你知道吗对于python2和早期的python3,您可以查看python的源代码,以了解它是如何实现的here或this snippet。你知道吗
我找不到python3ping的源代码。你知道吗
然而,通过查看https://github.com/samuel/python-ping/blob/master/ping.py的源代码,我们可以看到
verbose_ping
直接打印处理后的输出,并且在最后不返回任何内容(从结果为None可以明显看出)。你知道吗关于您的问题,我想告诉新的python程序员,一些测试框架抑制或重定向
stdout
流到subprocess.DEVNULL
或它们的自定义实现。为什么?在他们的控制下控制和清理测试套件的输出,否则您将在同一屏幕上得到测试套件和程序的混乱输出,这可能会造成混乱。你知道吗由于您不愿意编辑Python文件,而且我无法编辑源代码告诉我您使用的是哪种测试框架,所以它可能有一些隐藏的/异国情调的配置,在测试结束后转储所有打印。(我将相应地编辑我的答案)
相关问题 更多 >
编程相关推荐