bashhostlist.py
from __future__ import print_function
import subprocess
import sys
import logging
class Singleton(object):
"""
Creating a single object that will work for all the plugin
We create an object with an attrubute of the file path which is same for all the plugins
So rather than creating new object for all the same object works so making singleton
"""
_instance = None
def __new__(class_, *args, **kwargs):
if not isinstance(class_._instance, class_):
class_._instance = object.__new__(class_, *args, **kwargs)
return class_._instance
class InventoryMgmt(Singleton):
hostlist = {'hostcontent':None}
def __init__(self, path):
""" bash file path where environement are set """
self._scriptpath = path
Singleton类用于单例模式。
错误类型:
错误发生在python version3.4中,但不发生在python2.7中
错误日志:
2017-11-03 03:09:39,187 - root - INFO - Plugin started
2017-11-03 03:09:39,187 - root - INFO - Trying to fetch from etc_shadow_plugin
2017-11-03 03:09:39,187 - root - ERROR - object() takes no parameters
Traceback (most recent call last):
File "/home/sjoshi/python3.4/check-acess/plugins/plugin_etc_shadow/plugin_etc_shadow.py", line 91, in run
listofhost=phelper.getallthehosts(hostnamewithoutdollar, envscriptpath)
File "/home/sjoshi/python3.4/check-acess/lib/sshplugin/sshplugin.py", line 172, in getallthehosts
myhosts=hostname.InventoryMgmt(envscriptpath)
File "/home/sjoshi/python3.4/check-acess/lib/inventory/bashhostlist.py", line 16, in __new__
class_._instance = object.__new__(class_, *args, **kwargs)
这就是我打电话给班级的方式
myhosts=hostname.InventoryMgmt(envscriptpath)
也清楚地显示在错误消息
中疑惑:
即使存在 init ()方法,也需要一个参数 它抛出了这个错误。最重要的是错误不是 当它在python2.7上运行时
我已经确认它不是标签和间距问题,我看到许多答案怀疑这些问题,所以
答案 0 :(得分:2)
你应该删除那些额外的参数。在python2.7中,如果您将额外的参数传递给object.__new__
,则会发出DeprecationWarning
,但是this warning has been suppressed by default,如果您使用-Wdefault
开关运行脚本,您会看到:
$ python2 -Wdefault singleton.py
singleton.py:13: DeprecationWarning: object() takes no parameters
class_._instance = object.__new__(class_, *args, **kwargs)
<__main__.InventoryMgmt object at 0x106a2fd90> <__main__.InventoryMgmt object at 0x106a2fd90> True
从python3.3开始,此警告已转换为错误。