2024-04-27 05:21:08 发布
网友
我正在尝试将xz的输出通过管道传输到自定义python脚本:
xz
xz -cd file.pcap.xz | myscripy.py
但是,当脚本尝试运行以下行时,我收到一个错误:
收到一个错误
我在Ubuntu 2.04和Ubuntu2.04下运行。在
你有没有试过升级PyPcap来运行python3?这可能会有所帮助,因为Unicode处理更干净,而且在python3上不太容易发生意外。适当的包是可用的,至少在Debian上(可能还有派生发行版)。寻找:python3 pypcap。在
不能使用Python将包从文件传递到pcap.pcap()。您使用的^{} library是^{}和^{}C函数的一个薄薄的包装器,并且不提供传递Python文件对象的便利。这个包装器只接受文件名或网络接口名,其他都不接受。在
pcap.pcap()
pcap_open_offline()函数确实接受-作为stdin的别名,因此直接将其传入:
pcap_open_offline()
-
stdin
import pcap sniffer = pcap.pcap('-')
错误消息已经告诉您发生了什么。您需要pcap()函数的字符串,而不是file对象。要解决这个问题,请尝试
pcap()
pcap.pcap(io.open(STDIN_ALIAS, 'r').read())
但我不确定这是否有效,因为你的文件可能是二进制的,而不是文本。在这种情况下,您可能希望用'rb'而不是'r'标志打开,然后进行一些转换(特别是如果您使用python3而不是python2.7)。在
'rb'
'r'
我看到另一个问题:您的代码不可移植,因为它取决于:
阅读stdin的python方法如下(参见Reading binary data from stdin)
import sys string = sys.stdin.read()
你有没有试过升级PyPcap来运行python3?这可能会有所帮助,因为Unicode处理更干净,而且在python3上不太容易发生意外。适当的包是可用的,至少在Debian上(可能还有派生发行版)。寻找:python3 pypcap。在
不能使用Python将包从文件传递到} library 是^{} 和^{} C函数的一个薄薄的包装器,并且不提供传递Python文件对象的便利。这个包装器只接受文件名或网络接口名,其他都不接受。在
pcap.pcap()
。您使用的^{pcap_open_offline()
函数确实接受-
作为stdin
的别名,因此直接将其传入:错误消息已经告诉您发生了什么。您需要
pcap()
函数的字符串,而不是file对象。要解决这个问题,请尝试但我不确定这是否有效,因为你的文件可能是二进制的,而不是文本。在这种情况下,您可能希望用
'rb'
而不是'r'
标志打开,然后进行一些转换(特别是如果您使用python3而不是python2.7)。在我看到另一个问题:您的代码不可移植,因为它取决于:
^{pr2}$阅读stdin的python方法如下(参见Reading binary data from stdin)
相关问题 更多 >
编程相关推荐