如果不熟悉从中获取的.py文件,如何解析我使用的方法的结果?

2024-04-24 06:47:43 发布

您现在位置:Python中文网/ 问答频道 /正文

首先,我想说的是,我正在用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__']

Tags: frompyreducebytestimedirresultping
2条回答

首先,我想说的是,你选择的库自2014年以来就没有更新过,从源代码来看,它写得不好(在我看来像Java),而且没有一个真正的API可以使用,因为所有的方法都只是打印输出,不返回输出。所以我真正的建议是-不要使用它。你知道吗

考虑到这一点,如果必须使用它,真正的问题是如何从第三方标准输出中获得输出?如果您使用的是python3.4及更高版本,那么可以使用内置的redirect_stdout。下面是一个代码示例:

f = StringIO()
with redirect_stdout(f):
    ping.verbose_ping('10.0.1.135', count=3)

ping_string = f.getvalue()
ping_lines = ping_string.splitlines()

现在由您决定如何处理ping_lines列表中每一行的解析。你知道吗

对于python2和早期的python3,您可以查看python的源代码,以了解它是如何实现的herethis snippet。你知道吗

I am trying to utilize the python3-ping in my automated tests.

我找不到python3ping的源代码。你知道吗

然而,通过查看https://github.com/samuel/python-ping/blob/master/ping.py的源代码,我们可以看到verbose_ping直接打印处理后的输出,并且在最后不返回任何内容(从结果为None可以明显看出)。你知道吗

关于您的问题,我想告诉新的python程序员,一些测试框架抑制或重定向stdout流到subprocess.DEVNULL或它们的自定义实现。为什么?在他们的控制下控制和清理测试套件的输出,否则您将在同一屏幕上得到测试套件和程序的混乱输出,这可能会造成混乱。你知道吗

由于您不愿意编辑Python文件,而且我无法编辑源代码告诉我您使用的是哪种测试框架,所以它可能有一些隐藏的/异国情调的配置,在测试结束后转储所有打印。(我将相应地编辑我的答案)

相关问题 更多 >