如何通过Android按钮触发PC端Python脚本并实现交互式控制
解决Android按钮触发PC脚本并交互的方案
问题核心
普通SSH执行命令后会话会断开,无法向已启动的Python脚本持续输入内容,导致脚本的input()无法被触发。下面提供两种可行方案:
方案一:用Screen/Tmux保持持久SSH会话
利用终端复用工具(Screen或Tmux)让Python脚本在后台会话中运行,后续通过SSH向会话发送输入内容。
步骤:
- PC端准备:确保已安装
screen(大部分Linux发行版默认自带,Windows可通过WSL安装) - 按钮1触发脚本启动:Android端通过SSH执行以下命令,启动脚本并放入screen会话:
ssh your_pc_username@your_pc_ip "screen -dmS script_session python /path/to/your_script.py"-dmS:创建一个后台运行的screen会话,命名为script_session
- 按钮2触发脚本继续:Android端通过SSH向该screen会话发送回车符:
ssh your_pc_username@your_pc_ip "screen -S script_session -X stuff $'\n'"-X stuff:向指定会话发送输入内容,$'\n'是Shell的换行符表示
你的Python脚本无需修改:
print('Button 1 was pressed') input('waiting...') # 等待按钮2的回车输入 print('Button 2 was pressed')
方案二:用TCP套接字实现双向通信
直接通过网络套接字建立Android与PC的通信,更灵活可控,无需依赖SSH会话。
PC端修改后的Python脚本:
import socket # 配置监听地址和端口 HOST = '0.0.0.0' # 监听所有网卡 PORT = 12345 # 创建套接字并监听 with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: s.bind((HOST, PORT)) s.listen() conn, addr = s.accept() with conn: print(f"Connected by {addr}") while True: data = conn.recv(1024).decode().strip() if not data: break if data == "START": print('Button 1 was pressed') print('waiting...') elif data == "CONTINUE": print('Button 2 was pressed') break
Android端操作:
- 按钮1:向PC的
12345端口发送字符串START(可通过Termux的nc命令:echo "START" | nc your_pc_ip 12345,或Android app中用Socket API实现) - 按钮2:向同一端口发送字符串
CONTINUE,触发脚本后续逻辑
为什么普通SSH不行?
普通SSH执行命令时,进程绑定到当前SSH会话,会话断开后进程会收到SIGHUP信号终止;即使加nohup让进程后台运行,也无法再向其标准输入写入内容。而上述两种方案分别通过持久会话或直接通信通道解决了这个问题。
内容的提问来源于stack exchange,提问作者Vakker Livet
相关产品推荐
相关产品推荐

