Я не могу показаться, чтобы выяснить, где проблема,AttributeError: экземпляр не имеет атрибута, в пределах __init__
ошибка:
Traceback (most recent call last):
File "./miningScreensaver", line 171, in <module>
miningScreensaver().loop.run()
File "./miningScreensaver", line 81, in __init__
self.rxAddress = self.getRxAddress
AttributeError: miningScreensaver instance has no attribute 'getRxAddress'
код:
#! Python
class miningScreensaver:
def __init__(self):
DBusGMainLoop(set_as_default=True)
self.mem='ActiveChanged'
self.dest='org.gnome.ScreenSaver'
self.bus=SessionBus()
self.loop=MainLoop()
self.bus.add_signal_receiver(self.catch,self.mem,self.dest)
self.pipe = ""
#if you would like to specify a different rx address
# change rxAddress to the desired rx address
self.rxAddress = self.getRxAddress() #<--------------------ERROR HERE line 81
#self.rxaddress = "18X3TEigc6PVTsF9Atx5br7rEXfuZRqXEz"
def catch(self,ssOn):
if ssOn == 1: #Screensaver turned on
self.start()
else: #Screensaver turned off
self.stop()
def start(self):
self.pipe = Popen(["cgminer -o stratum+tcp://stratum.mining.eligius.st:3334 -u " + self.rxAddress + " -p x -I 9"], shell=True)
def stop(self):
self.pipe.kill()
def getRxAddress(self):
#check if bitcoin.conf exists
cmd = "ls $HOME/.bitcoin/bitcoin.conf"
pipe = Popen(cmd,stdout=PIPE,stderr=STDOUT)
pout = pipe.stdout.read()
pout = pout.split()
if pout[len(pout)-5]=='No' and \
pout[len(pout)-4]=='such' and \
pout[len(pout)-3]=='file' and \
pout[len(pout)-2]=='or' and \
pout[len(pout)-1]=='directory\n':
password = self.createBitConf()
else:
#check password
password = self.checkPassword()
#Launch bitcoin-qt -server
Popen(["bitcoin-qt","-server"])
#Access
access = ServiceProxy("http://darkPenguin:"+password+"@127.0.0.1:8332")
#access.getinfo()
return access.listreceivedbyaddress(0)
#access.sendtoaddress("12yBwyDJHABCvohdT8qBTeMJEYDqpXnVYV", 0.01)
def createBitConf(self):
randomPW = self.createRandomPW()
path = expanduser("~") + "/"
defFile = open("bitosbitcoinconf", "r")
newFile = open(path + ".bitcoin/bitcoin.conf","w")
for line in range(1,55):
newFile.write(defFile.readline())
password = "rpcpassword="+randomPW+"\n"
for line in range(56,110):
newFile.write(defFile.readline())
defFile.close()
newFile.close()
return randomPW
def createRandomPW(self):
myrg = random.SystemRandom()
length = 44
alphabet = string.ascii_letters + string.digits
pw = str().join(myrg.choice(alphabet) for _ in range(length))
return pw
def checkPassword(self):
path = expanduser("~") + "/"
bitConfFile = open(path + ".bitcoin/bitcoin.conf","r")
password = bitConfFile.readline(56)
bitConfFile.close()
return password[12:12+44-1] # "rpcpassword="+randomPW+"\n"
miningScreensaver().loop.run()
Это ведет я батти, как метод вызова, так и метод пишутся точно так же, и решения проблем других народов не помогли.
Ваша ошибка не соответствует вашему коду. Вы изменили свой код с тех пор, как получили эту ошибку? Перезапустите его и посмотрите, что произойдет. (Кроме того, настоятельно рекомендуется, чтобы любые классы, которые не наследуют ничего, вместо этого наследуют от 'object'. В противном случае вы получите классы старого стиля, которые сосут.) – user2357112
Как совершенно не связанная с вашей проблемой проблема обратите внимание, что выполнение команды «Popen» в 'ls' и синтаксический анализ сообщения об ошибке должно быть самым запутанным способом, который я когда-либо видел, чтобы проверить, существует ли файл ... – abarnert
Проверьте ваш отступ? «GetRxAddress» может быть разделен так, что это функция, определенная после класса, а не метод. – GP89