在Python程序中模拟CTRL+Z发送短信

2024-03-29 06:05:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经在我的Raspberry PI上编写了Flask web服务器

服务器接收POST并向SIM868模块硬件发送命令。这是我可以写的代码

def send(self):
        if not self.validator():
            data = {'message': 'Validation error'}
            return jsonify(data), 422

        delay = False
        if 'AMA' in self.port:
            delay = True

        gsm = serial.Serial('/dev/tty%s' % self.port, 9600, timeout=1)

        gsm.write('AT+CMGF=1\r')

        gsm.write('AT+CMGS="%s"\r\n' % self.number.encode())

        gsm.write(self.message.encode())
        # gsm.write('\x1a')  # Doesn't help
        # gsm.write(x11x01)  # Doesn't help
        # gsm.write('\r\n')  # Doesn't help
        # gsm.write(ascii.ctrl('z'))  # Doesn't help

        abort_after = 10
        start = time.time()
        output = ""

    while True:

            output = output + gsm.readline()

            print(output)

            if '+CMGS:' in output:
                gsm.close()
                return '{"id":%s,"error":0,"message":"success", "raw":"%s"}' % (id, output)

            if 'ERROR' in output:
                gsm.close()
                return '{"id":%s,"error":0,"message":"fail", "raw":"%s"}' % (id, output)

            delta = time.time() - start
            if delta >= abort_after:
                gsm.close()
                return '{"id":%s,"error":1,"message":"timeout", "raw":"%s"}' % (id, output)

所以问题是:模块可以接收数字和文本,但无法发送,因为没有收到CTRL+Z命令。在那之后,我打开PICOCOM,按CTRL+Z,然后我的短信就发送了

一切都很好,但如何真正模拟Python应用程序中使用串行端口的CTRL+Z呢

在向SIM卡硬件发送最后一个命令后,我看到OK应答,但也应该看到CMGS+应答

我得到的结果-超时(最后一个elseif案例)

在过去的一个月中,谷歌搜索了多次并阅读了多份文档:)


Tags: in命令selfidmessageoutputreturnif
1条回答
网友
1楼 · 发布于 2024-03-29 06:05:47

您可以使用pynput库。首先,通过以下方式安装它:

pip install pynput

将其导入到项目中,创建控制器对象,并使用.press()和.release()命令模拟击键。使用Key.cmd作为控制键的参数Here是一个教程

相关问题 更多 >