手机发送指令,让电脑运行Py文件(描述通俗小白看)

方法一:使用即时通讯工具(如微信、Telegram)

通过即时通讯工具发送指令给电脑上的机器人程序,让其运行指定的Python脚本。

★示例1(使用Telegram机器人)

库pyTelegramBotAPI
如果是自用,非商用,建议这个。无需设置.后端.前端.各种软件配置.网络端口.各种麻烦。别问为啥,问就是各种限制和超级漫长曲折的学习过程,得不偿失。Maybe更believe电报

1.创建Telegram机器人:

在Telegram中搜索BotFather,创建一个新机器人,并获取机器人令牌。

2.安装Python库:

pip install python-telegram-bot

3.编写Telegram机器人代码:

from telegram.ext import Updater, CommandHandler
import subprocess

TELEGRAM_BOT_TOKEN = 'your_telegram_bot_token'

def start(update, context):
    update.message.reply_text('Send me a command to run a Python script!')

def run_script(update, context):
    try:
        script_name = ' '.join(context.args)
        result = subprocess.run(['python', script_name], capture_output=True, text=True)
        update.message.reply_text(result.stdout if result.returncode == 0 else result.stderr)
    except Exception as e:
        update.message.reply_text(str(e))

def main():
    updater = Updater(TELEGRAM_BOT_TOKEN, use_context=True)
    dp = updater.dispatcher

    dp.add_handler(CommandHandler("start", start))
    dp.add_handler(CommandHandler("run", run_script))

    updater.start_polling()
    updater.idle()

if __name__ == '__main__':
    main()

4.使用:

在Telegram中向机器人发送/start命令。
然后发送/run script_name.py来运行指定的Python脚本。

示例2(微信)

微信网页版退出后,已废!

1. 安装必要的库

首先,确保安装了wxpy库:

pip install wxpy

2. 编写微信机器人代码

以下示例展示了如何使用wxpy库来接收微信消息并运行Python脚本:

from wxpy import Bot, TEXT
import subprocess

# 初始化机器人
bot = Bot()

def run_python_script(script_name, params):
    try:
        # 执行Python脚本并传递参数
        result = subprocess.run(['python', script_name] + params, capture_output=True, text=True)
        return result.stdout if result.returncode == 0 else result.stderr
    except Exception as e:
        return str(e)

# 监听来自好友的消息
@bot.register(msg_types=TEXT)
def handle_message(msg):
    # 假设消息格式为:脚本名 参数1 参数2 ...
    content = msg.text.split()
    if len(content) > 0:
        script_name = content[0]
        params = content[1:]
        script_output = run_python_script(script_name, params)
        msg.reply(script_output)

# 让机器人保持运行
bot.join()

3. 使用步骤

  • 初始化微信机器人:
    运行上面的Python代码时,会弹出一个二维码,用微信扫描二维码登录。
  • 发送消息:
    通过微信向机器人发送消息,格式为:script_name.py param1 param2 …
    例如:test_script.py 123 abc
  • 查看结果:
    机器人会执行指定的Python脚本,并将输出结果通过微信回复给发送者。

注意事项

  • 安全性:
    确保只允许信任的微信账号发送指令,以防止恶意执行代码。
    可以在代码中增加白名单功能,只允许特定好友发送消息。
  • 异常处理:
    增强异常处理,确保程序在各种情况下都能正常工作并返回有意义的错误信息。
  • 资源管理:
    确保长时间运行微信机器人不会导致资源泄露,例如定期检查并清理临时文件。

示例代码的改进

为提高安全性,可以在代码中添加简单的白名单机制,只允许特定好友发送消息:

from wxpy import Bot, TEXT
import subprocess

# 初始化机器人
bot = Bot()

# 允许发送消息的好友列表
allowed_friends = ['Friend1', 'Friend2']

def run_python_script(script_name, params):
    try:
        # 执行Python脚本并传递参数
        result = subprocess.run(['python', script_name] + params, capture_output=True, text=True)
        return result.stdout if result.returncode == 0 else result.stderr
    except Exception as e:
        return str(e)

# 监听来自好友的消息
@bot.register(msg_types=TEXT)
def handle_message(msg):
    if msg.sender.name in allowed_friends:
        content = msg.text.split()
        if len(content) > 0:
            script_name = content[0]
            params = content[1:]
            script_output = run_python_script(script_name, params)
            msg.reply(script_output)
        else:
            msg.reply("请发送正确的命令格式:脚本名 参数1 参数2 ...")
    else:
        msg.reply("您没有权限执行此操作。")

# 让机器人保持运行
bot.join()

通过上述代码,只有在allowed_friends列表中的好友才能发送指令并执行Python脚本,进一步增强了安全性。

方法二:使用电子邮件

通过发送电子邮件指令,让电脑上运行的程序检查邮件并执行指令。

示例代码:

1.安装必要的库:

pip install imaplib smtplib email

2.编写接收和发送邮件的代码:

import imaplib
import smtplib
import email
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
import subprocess
import time

IMAP_SERVER = 'imap.example.com'
SMTP_SERVER = 'smtp.example.com'
EMAIL_ACCOUNT = 'your_email@example.com'
EMAIL_PASSWORD = 'your_password'
SMTP_PORT = 587

def check_email():
    try:
        mail = imaplib.IMAP4_SSL(IMAP_SERVER)
        mail.login(EMAIL_ACCOUNT, EMAIL_PASSWORD)
        mail.select('inbox')

        status, messages = mail.search(None, 'UNSEEN')
        mail_ids = messages[0].split()

        for mail_id in mail_ids:
            status, msg_data = mail.fetch(mail_id, '(RFC822)')
            msg = email.message_from_bytes(msg_data[0][1])

            subject, encoding = decode_header(msg['Subject'])[0]
            if isinstance(subject, bytes):
                subject = subject.decode(encoding if encoding else 'utf-8')

            if msg.is_multipart():
                for part in msg.walk():
                    if part.get_content_type() == 'text/plain':
                        message = part.get_payload(decode=True).decode()
                        script_output = run_python_script(message)
                        send_email(subject, script_output, msg['From'])

            mail.store(mail_id, '+FLAGS', '\\Seen')

        mail.logout()
    except Exception as e:
        print(f"Error checking email: {e}")

def send_email(subject, body, to_email):
    try:
        msg = MIMEMultipart()
        msg['From'] = EMAIL_ACCOUNT
        msg['To'] = to_email
        msg['Subject'] = "Re: " + subject

        msg.attach(MIMEText(body, 'plain'))

        server = smtplib.SMTP(SMTP_SERVER, SMTP_PORT)
        server.starttls()
        server.login(EMAIL_ACCOUNT, EMAIL_PASSWORD)
        text = msg.as_string()
        server.sendmail(EMAIL_ACCOUNT, to_email, text)
        server.quit()
    except Exception as e:
        print(f"Error sending email: {e}")

def run_python_script(script_content):
    try:
        with open("temp_script.py", "w") as file:
            file.write(script_content)
        result = subprocess.run(['python', 'temp_script.py'], capture_output=True, text=True)
        return result.stdout if result.returncode == 0 else result.stderr
    except Exception as e:
        return str(e)

def decode_header(header):
    decoded_bytes, encoding = email.header.decode_header(header)[0]
    if isinstance(decoded_bytes, bytes):
        return decoded_bytes.decode(encoding or 'utf-8')
    return decoded_bytes

if __name__ == "__main__":
    while True:
        check_email()
        time.sleep(60)  # 每分钟检查一次邮件

方法三:使用Webhook和Web服务

自评:

用Flask做好后端连接,只是刚开始。还要搞前端,比如py的朋友简单上手flet,或者励志多平台的谷歌flutter等等吧。看个人需求和商业应用吧,我暂时用不到。
通过手机应用或浏览器发送HTTP请求到电脑上运行的Web服务,让其运行指定的Python脚本。

示例代码(使用Flask):

1.安装Flask库:

pip install flask

2.编写Flask Web服务:

from flask import Flask, request, jsonify
import subprocess

app = Flask(__name__)

@app.route('/run', methods=['POST'])
def run_script():
    try:
        data = request.json
        script_name = data.get('script_name')
        result = subprocess.run(['python', script_name], capture_output=True, text=True)
        return jsonify({
            'output': result.stdout if result.returncode == 0 else result.stderr
        })
    except Exception as e:
        return jsonify({'error': str(e)})

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

3.使用:

  1. 启动Flask服务器:python app.py
  2. 使用Postman或任何HTTP客户端发送POST请求到http://<your_server_ip>:5000/run,请求体为JSON格式,如:{“script_name”: “script_name.py”}。

结论

上述方法可以实现通过手机发送指令,让电脑运行Python脚本。根据具体需求和技术偏好,可以选择不同的实现方式。无论哪种方法,都需要考虑安全性和稳定性。

  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值