По какой-то причине я не могу выполнить функцию другого скрипта, даже если я импортировал этот модуль.Python 3.4 - 'module' не имеет атрибута 'send_sms'
Соответствующий код «master_module.py» выглядит следующим образом:
import sms_values
class ClientThread(threading.Thread): # Class that implements the client threads in this server
def __init__(self, client_sock): # Initialize the object, save the socket that this thread will use.
threading.Thread.__init__(self)
self.client = client_sock
def run(self): # Thread's main loop. Once this function returns, the thread is finished and dies.
global QUIT # Need to declare QUIT as global, since the method can change it
done = False
cmd = self.readline() # Read data from the socket and process it
while not done:
if 'quit' == cmd:
self.writeline('Ok, bye. Server shut down')
QUIT = True
done = True
elif 'bye' == cmd:
self.writeline('Ok, bye. Thread closed')
done = True
elif 'send' == cmd:
sms_values.send_sms()
self.writeline('text should be sent')
done = True
else:
self.writeline(self.name)
cmd = self.readline()
self.client.close() # Make sure socket is closed when we're done with it
return
Примечание:
Всего код опущен для clarfication того, где ошибка
Там нет __name__ == '__main__'
блока в sms_values.py.
send_sms()
не определен внутри класса
Отсутствует отступ в строке определения, поэтому он является модульным уровнем.
Здесь я пытаюсь выполнить функцию из другого модуля в поточном сервере с непрерывным запуском с условной «отправкой», написанной в пользовательской консоли.
И это код, я бег, содержащийся в sms_values.py:
def send_sms():
try:
ss = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
port = 80
ss.connect((127.0.0.1, port))
a = url.encode('ascii') # string needed to change into bytecode
print(sys.stderr, 'sending "%s"' % a)
ss.sendall(a)
amount_recieved = 0
amount_recieved = len(a)
while amount_recieved < amount_expected:
data = ss.recv(180)
amount_recieved += len(data)
print(sys.stderr, 'closing socket')
ss.close()
Примечания: Весь код опущен для clarfication того, что функции я звоню.
Довольно прямо, я просто хочу отправить команду http POST/GET маршрутизатору, когда кто-то печатает на сервере непрерывного запуска. Однако флаги Обратное прослеживание вверх это:
Exception in thread Thread-1:
Traceback (most recent call last):
File "C:\Python34\lib\threading.py, line 920, in_bootstrap_inner
self.run()
File "C:\Users\Savag\PycharmProjects\master_module.py", in line 29, in run
sms_values.send_sms()
AttributeError: 'module object has no attribute 'send_sms'
Может кто-нибудь, пожалуйста, пролить свет на это?
Я вроде подозреваю, что это потому, что я работаю в классе на другом модуле? Я не уверен, что это даже имеет значение. Другие ответы на модуль/атрибуты не отвечают или не помогают в этой ситуации.
Теперь я импортировал другой модуль, from sub_module import sms_values
также не работает для меня.
Вы 'def send_sms' внутри блока' if __name__ == '__main __' '? Что вы подразумеваете под «Я работаю в классе на другом модуле»? Определен ли 'send_sms' _inside_ класс? Если строка с индексом 'def' с отступом или находится на уровне модуля? –
Спасибо за быстрый ответ! Nah no, '__name__ == '__main __'' вообще в этом модуле. Хорошо, если вы посмотрите в 'master_module.py', я звоню для выполнения другой функции, но этот код находится внутри функции класса. Мне было интересно, не вызовет ли это проблемы. 'send_sms' не определен внутри класса. 'def send_sms()' не с отступом, не так ли? – Savagefool
В 'sms_values.send_sms()', является ли 'sms_values' фактическое имя модуля? –