`
angellin0
  • 浏览: 115439 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

pickle.PicklingError: Can't pickle <function scan_progressive at 0x01C255B0>:...

 
阅读更多
   在安装了python-nmap0.14后,写了一个简单的测试执行失败。
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "D:\opt\Python27\lib\multiprocessing\forking.py", line 373, in main
    prepare(preparation_data)
  File "D:\opt\Python27\lib\multiprocessing\forking.py", line 488, in prepare
    '__parents_main__', file, path_name, etc
  File "E:\Workspace\scanner_01.py", line 13, in <module>
    nma.scan(hosts='192.168.18.0/24', arguments='-sP')
  File "D:\opt\Python27\lib\site-packages\nmap\nmap.py", line 417, in scan
    self._process.start()
  File "D:\opt\Python27\lib\multiprocessing\process.py", line 130, in start
    self._popen = Popen(self)
  File "D:\opt\Python27\lib\multiprocessing\forking.py", line 271, in __init__
    dump(process_obj, to_child, HIGHEST_PROTOCOL)
  File "D:\opt\Python27\lib\multiprocessing\forking.py", line 193, in dump
    ForkingPickler(file, protocol).dump(obj)
  File "D:\opt\Python27\lib\pickle.py", line 224, in dump
    self.save(obj)
  File "D:\opt\Python27\lib\pickle.py", line 331, in save
    self.save_reduce(obj=obj, *rv)
  File "D:\opt\Python27\lib\pickle.py", line 419, in save_reduce
    save(state)
  File "D:\opt\Python27\lib\pickle.py", line 286, in save
    f(self, obj) # Call unbound method with explicit self
  File "D:\opt\Python27\lib\pickle.py", line 649, in save_dict
    self._batch_setitems(obj.iteritems())
  File "D:\opt\Python27\lib\pickle.py", line 681, in _batch_setitems
    save(v)
  File "D:\opt\Python27\lib\pickle.py", line 286, in save
    f(self, obj) # Call unbound method with explicit self
  File "D:\opt\Python27\lib\pickle.py", line 747, in save_global
    (obj, module, name))
pickle.PicklingError: Can't pickle <function scan_progressive at 0x01C255B0>: it
's not found as nmap.nmap.scan_progressive

  代码如下:
import nmap
nma = nmap.PortScannerAsync()

def callback_result(host, scan_result):
    print '------------------'
    print host, scan_result

nma.scan(hosts='192.168.18.0/24', arguments='-sP')

while nma.still_scanning():
    print("Waiting ...")
    nma.wait(2) 

起初以为代码写错了,然后我找到nmap安装目录下的example.py执行,发生同样的错误。经过反复跟踪,发现在pickle.py文件745行抛出了错误:
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "D:\opt\Python27\lib\site-packages\nmap\nmap.py", line 413, in scan
    target=self.scan_progressive,
AttributeError: 'PortScannerAsync' object has no attribute 'scan_progressive'

然后又阅读nmap的源码nmap.py,终于发现在402行,方法scan_progressive被定义在scan方法内部,导致pickle失败。

解决方法:
    将方法Scan_progressive定义到外面,并将nmap.py 413行从
target=scan_progressive,
改为:
target=self.progressive,
即可。


总结:不晓得有木有其他的影响,但是得出一个结论,别人的东西,不能尽信,是钢是铁,试了才晓得。。。。


分享到:
评论

相关推荐

    -pickle.PicklingError: Can&#039;t pickle &lt;function... pycharm2023运行报错

    然而,在升级PyCharm至2023版本后,你遇到了一个特定的错误:“_pickle.PicklingError: Can't pickle &lt;function...”,这意味着在尝试序列化某个函数时出现了问题。 `PicklingError`通常是由于`pickle`模块无法处理...

    Python multiprocess pool模块报错pickling error问题解决方法分析

    本文实例讲述了Python ...PicklingError: Can’t pickle &lt;type&gt;: attribute lookup __builtin__.function failed 查了下官方文档发现python默认只能pickle以下的类型: None, True, and False integers, floa

    解决python多线程报错:AttributeError: Can&#39;t pickle local object问题

    主要介绍了解决python多线程报错:AttributeError: Can't pickle local object问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

    解决python多线程报错:AttributeError: Cant pickle local object问题

    报错信息: Traceback (most recent call last): File “D:/flaskProject/test.py”, line 35, in test pool.apply(self.out, args=(i,)) File “Python37-32\lib\multiprocessing\pool.py”, line 261, in apply ...

    Python使用pickle模块存储数据报错解决示例代码

    本文研究的主要是Python使用pickle模块存储数据报错解决方法,以代码的形式展示,具体如下。 首先来了解下pickle模块 pickle提供了一个简单的持久化功能。可以将对象以文件的形式存放在磁盘上。 pickle模块只能在...

    jsonpickle.zip

    jsonpickle 是一个 Python 库,用来序列化复杂的 Python 对象到 JSON 文档。 示例代码: &gt;&gt;&gt; import jsonpickle &gt;&gt;&gt; pickled = jsonpickle.encode(obj) 标签:jsonpickle

    Python使用pickle模块报错EOFError Ran out of input的解决方法

    本文实例讲述了Python使用pickle模块报错EOFError Ran out of input的解决方法。分享给大家供大家参考,具体如下: 遇到了 EOFError:Ran out of input ... return pickle.load(f) except EOFError: #捕获异常EOFError

    jsonpickle-0.9.6.tar

    jsonpickle-0.9.6.tar 是一个包含 jsonpickle 库版本 0.9.6 的压缩文件。Jsonpickle 是一个 Python 模块,它允许将 Python 对象序列化为 JSON(JavaScript Object Notation)格式,并能从 JSON 数据中恢复这些对象。...

    Python 中Pickle库的使用详解

    - protocol:序列化使用的协议版本,可以是0, 1, 2, 3, 4中之一,或使用pickle.HIGHEST_PROTOCOL来获取最高版本协议,pickle.DEFAULT_PROTOCOL获取默认协议。Python 3.5版本中,最高协议为4,而默认协议为3。 - fix_...

    proto.menu关键代码

    ### Proto.menu关键代码解析 #### 一、概览 本文将深入分析一段使用`Proto.menu`库实现右键菜单功能的关键代码。通过本篇内容,读者可以了解到如何使用`dtree`来创建一个具备基本功能的右键菜单,并对代码中的各个...

    python3内置持久化模块pickle心得

    语法为 `pickle.dump(obj, file[, protocol])`,其中`obj`是要写入的对象,`file`是一个打开的文件对象(必须使用`"wb"`模式打开),`protocol`是可选参数,指定序列化的协议版本,默认为`pickle.HIGHEST_PROTOCOL`...

    Python基础——pickle(保存与提取数据)

    文章目录1.pickle 保存2.pickle 提取 1.pickle 保存 pickle 是一个 python 中, 压缩/保存/提取 文件的模块. 最一般的使用方式非常简单....wb 是以写的形式打开 ‘color.pickle’ 这个文件, 然后 pickle.dump 你要保存

    Python标准库示例

    - `pickle.dump`:将对象保存到文件。 - `pickle.load`:从文件加载对象。 - **json模块**:用于处理JSON格式的数据。 - `json.dumps`:将Python对象编码成JSON字符串。 - `json.loads`:将JSON字符串解码为...

    caffe.proto

    caffe.proto文件是一个消息格式文件,后缀名为proto. proto文件即消息协议原型定义文件,在该文件中可以通过使用描述性语言来定义程序中需要用到的数据格式

    python中的Pickle文件和npy文件(csdn)————程序.pdf

    print(type(test)) # 输出:&lt;class 'numpy.ndarray'&gt; print(test.shape) # 输出:(100003, 300) print(test[0]) # 输出数组的第一个元素 ``` - **存入txt文件**:将Numpy数组存入txt文件,可以将数组每一行转化...

    替换包MITSceneParsing.pickle.rar

    运行FCN网络时出现如下错误Cannot feed value of shape (0,) ..., 224, 224, 3)',原因是MITSceneParsing.pickle size太小,正常size应该是4595KB。将上面文件下载并替换掉Data_zoo\MIT_SceneParsing中的1k相同文件。

    pickle4-0.0.1.tar.gz

    在pickle库中,主要有两个主要函数:`pickle.dump()`和`pickle.load()`. `pickle.dump()`用于将Python对象序列化到一个打开的二进制文件对象中,而`pickle.load()`则从打开的二进制文件对象中读取并反序列化为Python...

    msgpack-python-0.4.2.tar

    When you can't use binary distribution, you need to install Visual Studio or Windows SDK on Windows. (NOTE: Visual C++ Express 2010 doesn't support amd64. Windows SDK is recommanded way to build amd64...

    nltk全套插件打包,包括punkt插件包

    描述中的"全套插件打包"可能是指`nltk`提供的其他数据资源和模型,这些资源通常以pickle格式存储,如压缩包子文件的文件名所示。pickle是Python用于序列化对象的内置模块,可以将Python对象保存到文件或从文件中恢复...

Global site tag (gtag.js) - Google Analytics