【问题标题】:Python sending many sms via usb serialPython通过USB串口发送许多短信
【发布时间】:2015-08-30 16:13:30
【问题描述】:

我现在真的迷路了,我需要向多个收件人发送短信。

如何向数据库中的所有联系人发送短信?我使用for循环吗?或者还有其他方法吗?请帮忙,非常感谢。

这是我的短信代码

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import serial
import time
import sys
import MySQLdb as mdb

try:
    con = mdb.connect('localhost', 'user', 'password', 'db')
    print 'Database connected';
except Exception as e:
    sys.exit('Database connection failed')

cur = con.cursor()
cur.execute("Select contacts from dbtable")
con.commit()
number= cur.fetchall()
print number

for item in number:
    recipient= recipient+item

class TextMessage:
    def __init__(self, recipient="xxxxxxxx",message="TextMessage.content not set."):
        self.recipient = recipient
        self.content = message

    def setRecipient(self, number):
        self.recipient = number

    def setContent(self, message):
        self.content = message

    def connectPhone(self):
        self.ser = serial.Serial('/dev/ttyUSBSMS', 460800, timeout=5, xonxoff = False, rtscts = False, bytesize = serial.EIGHTBITS, parity = serial.PARITY_NONE, stopbits = serial.STOPBITS_ONE)
        time.sleep(1)

    def sendMessage(self):
        self.ser.write('ATZ\r')
        time.sleep(1)
        self.ser.write('AT+CMGF=1\r')
        time.sleep(1)
        self.ser.write('''AT+CMGS="''' + self.recipient + '''"\r''')
        time.sleep(1)
        self.ser.write(self.content + "\r")
        time.sleep(1)
        self.ser.write(chr(26))
        time.sleep(1)
     def disconnectPhone(self):
        self.ser.close()

sms = TextMessage("xxxxxxxx","Important!")
sms.connectPhone()
sms.sendMessage()
sms.disconnectPhone()
print "message sent successfully"

打印输出

(('99876545',), ('87546412',), ('97789546',), ('87546464',), ('97377454',))

【问题讨论】:

  • 请决定要使用哪种编码,因为指定多个编码是没有意义的。为了兼容性,我建议使用 UTF-8。有关详细信息,请参阅PEP0263
  • 好的,谢谢
  • 多次阅读您的问题后:您的问题到底是什么?您能否提供一个匿名的 sn-p 说明数据库服务器在您的 .fetchall() 上返回的内容,因为 docs 告诉您这是一个元组列表。
  • 是的,它是元组。我希望能够发送给许多收件人,因为此代码最初是一个数字。我到学校时会放上小节。
  • 嗨,我已经添加了 sn-p。

标签: python mysql for-loop sms


【解决方案1】:

一个简单的for 循环就可以完成这项工作:

t_list =  (('99876545',), ('87546412',), ('97789546',), ('87546464',), ('97377454',))

for t in t_list:
    number = t[0]
    print(number)
    # Call function to send SMS to the given `number`

只需调整这种基本方法即可满足您的需求。

【讨论】:

  • number=t[0] 表示只发送到第一个号码?
  • ('99876545',) 是一个所谓的元组。我们可以通过像t[0] 那样索引元组来访问元组的第一个元素,在本例中是数字99876545。通过在循环中遍历包含所有元组的列表并调用所需的函数来向从元组读取的号码发送短信,我们可以一个接一个地向所有收件人发送消息。您应该查看有关 for-loops、元组和列表的文档。
  • 我明白了!非常感谢。
  • @Tyra:如果我能回答您的问题,请接受我的回答,以便将您的问题标记为已关闭/已回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多