Skip to content

Commit

Permalink
update
Browse files Browse the repository at this point in the history
  • Loading branch information
mikigo committed Oct 31, 2024
1 parent 2375177 commit 1b3f0b1
Show file tree
Hide file tree
Showing 3 changed files with 55 additions and 51 deletions.
35 changes: 13 additions & 22 deletions src/recording_screen.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
#!/usr/bin/env python3
# _*_ coding:utf-8 _*_

import signal
# SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd.

# SPDX-License-Identifier: GPL-2.0-only
# pylint: disable=C0114
# pylint: disable=C0301,W0702,C0103,C0411,C0412
import time
import subprocess as sp
import subprocess
import os
import errno

Expand Down Expand Up @@ -42,7 +42,7 @@ def recording_screen(name):
logger.info(f"录屏路径存放 {path}")

with open(os.devnull, "w", encoding="utf-8") as dev_null:
with sp.Popen(cmd, stdin=sp.PIPE, stdout=dev_null, stderr=dev_null, close_fds=True) as proc:
with subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=dev_null, stderr=dev_null, close_fds=True) as proc:
time.sleep(0.5)
if proc.poll() is not None:
raise RuntimeError("ffmpeg did not start")
Expand All @@ -52,25 +52,16 @@ def recording_screen(name):
finally:
logger.info("停止录屏")
try:
with suppress(IOError, errnos=(errno.EINVAL, errno.EPIPE)):
logger.debug(" stop step 1")
proc.communicate(input=b"q", timeout=10)
logger.debug(f"录屏状态 {proc.stdin.closed}")
if not proc.stdin.closed:
proc.stdin.close()
logger.debug("停止录屏 finish")
except:
try:
for _ in range(5):
proc.communicate(input=b"q", timeout=10)
proc.stdin.close()
time.sleep(0.5)
if proc.stdin.closed:
break
except:
pass

logger.info("停止录屏 finish")
os.kill(proc.pid, signal.SIGINT)
proc.wait(timeout=10)
except subprocess.TimeoutExpired:
logger.warning("ffmpeg did not stop gracefully, sending SIGKILL")
os.kill(proc.pid, signal.SIGKILL)
proc.wait()
finally:
if not proc.stdin.closed:
proc.stdin.close()
logger.info(f"停止录屏 finish {proc.stdin.closed}")


def _create_ffmpeg_cmd(width, height, dir_path, file_name, qp=1):
Expand Down
8 changes: 1 addition & 7 deletions src/remotectl/_base.py
Original file line number Diff line number Diff line change
Expand Up @@ -169,8 +169,6 @@ def remote_client(ip, port):
return c
except Exception as e:
raise e
finally:
c.close()


def remote_server(obj, port):
Expand All @@ -180,6 +178,7 @@ def remote_server(obj, port):
raise ImportError("Please install zerorpc")
server = zerorpc.Server(obj)
server.bind(f"tcp://0.0.0.0:{port}")
print(f"rpc server running: tcp://0.0.0.0:{port}")
server.run()


Expand All @@ -198,8 +197,3 @@ def _remote_server(obj, port):
server.register_function(getattr(obj, func), func)
server.serve_forever()


if __name__ == '__main__':
from src import Src

_remote_server(Src(), 4242)
63 changes: 41 additions & 22 deletions src/remotectl/remote.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
from typing import Union, List

from funnylog import logger

from setting import conf
from src import Src
from src.cmdctl import CmdCtl
Expand All @@ -15,6 +14,28 @@
from src.shortcut import ShortCut


class AutoCloseRCTLProxy:
def __init__(self, client):
self._client = client

def __getattr__(self, name):
attr = getattr(self._client, name)
if callable(attr):
# 方法
def wrapper(*args, **kwargs):
try:
return attr(*args, **kwargs)
finally:
self._client.close()

return wrapper
else:
return attr

def __del__(self):
self._client.close()


class Remote(ShortCut, CmdCtl):
def __init__(self, ip, user, password, transfer_appname=None, restart_service=False):
self.user = user
Expand All @@ -23,6 +44,9 @@ def __init__(self, ip, user, password, transfer_appname=None, restart_service=Fa
self.transfer_appname = transfer_appname
self.restart_service = restart_service
self.tmp_obj = None
self._rdog = None
self._rctl = None
self._rctl_plus = None

def __getattribute__(self, item):
if not item.startswith("__") and not item.endswith("__"):
Expand Down Expand Up @@ -61,40 +85,44 @@ def func(*args, **kwargs):

@property
def rdog(self) -> DogtailUtils:
return remote_dogtail_ctl(
self._rdog = remote_dogtail_ctl(
user=self.user,
ip=self.ip,
password=self.password,
restart_service=self.restart_service,
)

def click_element_by_attr(self, element, button=1):
self.rdog.element_click(element, button)

def get_element_children_txt(self, element):
return self.rdog.get_element_children_text(element)

def get_element_center(self, element):
return self.rdog.element_center(element)
return AutoCloseRCTLProxy(self._rdog)

@property
def rctl(self) -> Src:
return remote_other_ctl(
self._rctl = remote_other_ctl(
user=self.user,
ip=self.ip,
password=self.password,
restart_service=self.restart_service,
)

return AutoCloseRCTLProxy(self._rctl)

@property
def rctl_plus(self) -> Src:
return remote_other_ctl(
self._rctl_plus = remote_other_ctl(
user=self.user,
ip=self.ip,
password=self.password,
transfer_appname=self.transfer_appname,
restart_service=self.restart_service,
)
return AutoCloseRCTLProxy(self._rctl_plus)

def click_element_by_attr(self, element, button=1):
self.rdog.element_click(element, button)

def get_element_children_txt(self, element):
return self.rdog.get_element_children_text(element)

def get_element_center(self, element):
return self.rdog.element_center(element)

def find_image(
self,
Expand Down Expand Up @@ -168,12 +196,3 @@ def ocr(
return self.rctl_plus.ocr_remote(target, picture_abspath, similarity, return_default, return_first, lang,
network_retry,
pause, timeout, max_match_number)

if __name__ == '__main__':
a = Remote(
user="uos",
ip="10.8.7.55",
password="1",
).rcmd.sudo_run_cmd("systemctl restart lightdm.service")
# ).run_cmd("ls")
print(a)

0 comments on commit 1b3f0b1

Please sign in to comment.