我的Python自学之路python自学

python控制远程设备

2019-02-19  本文已影响16人  霡霂976447044

主要使用socket来进行两台电脑的通信,使用pyautogui包来控制键盘。

安装依赖

类Ubuntu

$ sudo apt-get install python3-pip
$ sudo pip3 install python3-xlib
$ sudo apt-get install scrot
$ sudo apt-get install python3-tk
$ sudo apt-get install python3-dev  

MAC OS

$ sudo pip3 install pyobjc-framework-Quartz
$ sudo pip3 install pyobjc-core
$ sudo pip3 install pyobjc
$ sudo pip3 install pillow

Windows

pip3 install pyautogui

被控制端

import pyautogui
 
import time
 
from socket import socket, AF_INET, SOCK_STREAM, SOL_SOCKET, SO_REUSEADDR
 
tcp_server_socket = socket(AF_INET, SOCK_STREAM)
 
address = ('', 8000)
 
tcp_server_socket.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
 
tcp_server_socket.bind(address)
 
tcp_server_socket.listen(128)
 
def handle_key(key):
    key = key.decode()
    if key == "alt":
        print("按下alt键盘")
        pyautogui.press("alt")
    elif key == "enter":
        time.sleep(5)
        pyautogui.press("enter")
        print("按下enter键盘")
    elif key == "win":
        print("按下窗口键")
        pyautogui.hotkey("winleft")
    else:
        print("按下其它键")
        time.sleep(5)
        pyautogui.typewrite(key)
 
while True:
    print("等待连接")
    tcp_client_socket,addr = tcp_server_socket.accept()
    print('...connected from', addr)
    while True:
        data = tcp_client_socket.recv(1024)
        if not data:
            break
        try:
            if data.decode().startswith('exit'):
                break
        except Exception as e:
            print(e)
            break
 
 
        print(data)
        handle_key(data)
        tcp_client_socket.send('server recved.'.encode())
    tcp_client_socket.close()

控制端

import socket
 
HOST = 'localhost'
PORT = 8000
BUFSIZE = 1024
 
ADDR=(HOST, PORT)
 
tcp_client=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
tcp_client.connect(ADDR)
 
FLAG = True
 
while True:
    data = input('>')
 
    if not data:
        break
 
    tcp_client.send(data.encode())
 
    data=tcp_client.recv(BUFSIZE)
 
    if not data:
        FLAG = False
        break
    print(data)
 
tcp_client.close()
上一篇下一篇

猜你喜欢

热点阅读