方法一:使用即时通讯工具(如微信、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.使用:
- 启动Flask服务器:python app.py
- 使用Postman或任何HTTP客户端发送POST请求到http://<your_server_ip>:5000/run,请求体为JSON格式,如:{“script_name”: “script_name.py”}。
结论
上述方法可以实现通过手机发送指令,让电脑运行Python脚本。根据具体需求和技术偏好,可以选择不同的实现方式。无论哪种方法,都需要考虑安全性和稳定性。