Переведен orchestrator

dev-linux
Ivan Maslov 2 years ago
parent e673287735
commit adb88c41e3

@ -1779,18 +1779,20 @@ def ProcessorActivityItemAppend(inGSettings = None, inDef=None, inArgList=None,
## Process defs
def ProcessIsStarted(inProcessNameWOExeStr): # Check if process is started
"""
Check if there is any running process that contains the given name processName.
Проверить, запущен ли процесс, который в наименовании содержит inProcessNameWOExeStr.
!ВНИМАНИЕ! ПРОВЕРЯЕТ ВСЕ ПРОЦЕССЫ ОПЕРАЦИОННОЙ СИСТЕМЫ. И ДРУГИХ ПОЛЬЗОВАТЕЛЬСКИХ СЕССИЙ, ЕСЛИ ОНИ ЗАПУЩЕНЫ НА ЭТОЙ МАШИНЕ.
.. code-block:: python
# USAGE
# ПРИМЕР
from pyOpenRPA import Orchestrator
lProcessIsStartedBool = Orchestrator.ProcessIsStarted(inProcessNameWOExeStr = "notepad")
# lProcessIsStartedBool is True - notepad.exe is running on the Orchestrator machine
:param inProcessNameWOExeStr: Process name WithOut (WO) '.exe' postfix. Example: "notepad" (not "notepad.exe")
:return: True - process is running on the orchestrator machine; False - process is not running on the orchestrator machine
:param inProcessNameWOExeStr: Наименование процесса без расширения .exe (WO = WithOut = Без) Пример: Для проверки процесса блокнота нужно указывать "notepad", не "notepad.exe"
:return: True - Процесс запущен на ОС ; False - Процесс не запущен на ОС, где работает Оркестратор
"""
#Iterate over the all the running process
for proc in psutil.process_iter():
@ -1804,11 +1806,13 @@ def ProcessIsStarted(inProcessNameWOExeStr): # Check if process is started
def ProcessStart(inPathStr, inArgList, inStopProcessNameWOExeStr=None):
"""
Start process locally. Extra feature: Use inStopProcessNameWOExeStr to stop the execution if current process is running.
Запуск процесса на сессии Оркестратора, если на ОС не запущен процесс inStopProcessNameWOExeStr.
!ВНИМАНИЕ! ПРИ ПРОВЕРКЕ РАНЕЕ ЗАПУЩЕННЫХ ПРОЦЕССОВ ПРОВЕРЯЕТ ВСЕ ПРОЦЕССЫ ОПЕРАЦИОННОЙ СИСТЕМЫ. И ДРУГИХ ПОЛЬЗОВАТЕЛЬСКИХ СЕССИЙ, ЕСЛИ ОНИ ЗАПУЩЕНЫ НА ЭТОЙ МАШИНЕ.
.. code-block:: python
# USAGE
# ПРИМЕР
from pyOpenRPA import Orchestrator
Orchestrator.ProcessStart(
@ -1817,10 +1821,9 @@ def ProcessStart(inPathStr, inArgList, inStopProcessNameWOExeStr=None):
inStopProcessNameWOExeStr = "notepad")
# notepad.exe will be started if no notepad.exe is active on the machine
:param inPathStr: Command to send in CMD
:param inArgList: List of the arguments for the CMD command. Example: ["test.txt"]
:param inStopProcessNameWOExeStr: Trigger: stop execution if process is running. Process name WithOut (WO) '.exe' postfix. Example: "notepad" (not "notepad.exe")
:return: None - nothing is returned. If process will not start -exception will be raised
:param inPathStr: Путь к файлу запускаемого процесса
:param inArgList: Список аргументов, передаваемых в запускаемый процесс. Пример: ["test.txt"]
:param inStopProcessNameWOExeStr: Доп. контроль: Не запускать процесс, если обнаружен запущенный процесс под наименованием inStopProcessNameWOExeStr без расширения .exe (WO = WithOut = Без)
"""
lStartProcessBool = True
if inStopProcessNameWOExeStr is not None: #Check if process running
@ -1841,11 +1844,11 @@ def ProcessStart(inPathStr, inArgList, inStopProcessNameWOExeStr=None):
def ProcessStop(inProcessNameWOExeStr, inCloseForceBool, inUserNameStr = "%username%"):
"""
Stop process on the orchestrator machine. You can set user session on the machine and set flag about to force close process.
Остановить процесс на ОС, где работает Оркестратор, под учетной записью inUserNameStr.
.. code-block:: python
# USAGE
# ПРИМЕР
from pyOpenRPA import Orchestrator
Orchestrator.ProcessStop(
@ -1854,10 +1857,9 @@ def ProcessStop(inProcessNameWOExeStr, inCloseForceBool, inUserNameStr = "%usern
inUserNameStr = "USER_99")
# Will close process "notepad.exe" on the user session "USER_99" (!ATTENTION! if process not exists no exceptions will be raised)
:param inProcessNameWOExeStr: Process name WithOut (WO) '.exe' postfix. Example: "notepad" (not "notepad.exe")
:param inCloseForceBool: True - do force close. False - send signal to safe close (!ATTENTION! - Safe close works only in orchestrator session. Win OS doens't allow to send safe close signal between GUI sessions)
:param inUserNameStr: User name which is has current process to close. Default value is close process on the Orchestrator session
:return: None
:param inProcessNameWOExeStr: Наименование процесса без расширения .exe (WO = WithOut = Без). Пример: Для проверки процесса блокнота нужно указывать "notepad", не "notepad.exe"
:param inCloseForceBool: True - принудительно завершить процесс. False - отправить сигнал на безопасное отключение (!ВНИМАНИЕ! - ОС не позволяет отправлять сигнал на безопасное отключение на другую сесиию - только на той, где работает Оркестратор)
:param inUserNameStr: Наименование пользователя, под именем которого искать процесс для остановки. По умолчанию "%username%" - искать процесс на текущей сессии
"""
# Support input arg if with .exe
lProcessNameWExeStr = inProcessNameWOExeStr
@ -1878,30 +1880,32 @@ def ProcessStop(inProcessNameWOExeStr, inCloseForceBool, inUserNameStr = "%usern
def ProcessListGet(inProcessNameWOExeList=None):
"""
Return process list on the orchestrator machine sorted by Memory Usage. You can determine the list of the processes you are interested - def will return the list about it.
Вернуть список процессов, запущенных на ОС, где работает Оркестратор. В списке отсортировать процессы по количеству используемой оперативной памяти. Также можно указать перечень процессов, которые интересуют - функция будет показывать активные из них.
!ВНИМАНИЕ! ДЛЯ ПОЛУЧЕНИЯ СПИСКА ВСЕХ ПРОЦЕССОВ ОС НЕОБХОДИМО ЗАПУСКАТЬ ОРКЕСТРАТОР С ПРАВАМИ АДМИНИСТРАТОРА.
.. code-block:: python
# USAGE
# ПРИМЕР
from pyOpenRPA import Orchestrator
lProcessList = Orchestrator.ProcessListGet()
# Return the list of the process on the machine.
# !ATTENTION! RUn orchestrator as administrator to get all process list on the machine.
:param inProcessNameWOExeList:
:return: {
"ProcessWOExeList": ["notepad","..."],
"ProcessWOExeUpperList": ["NOTEPAD","..."],
"ProcessDetailList": [
{
'pid': 412,
'username': "DESKTOP\\USER",
'name': 'notepad.exe',
'vms': 13.77767775,
'NameWOExeUpperStr': 'NOTEPAD',
'NameWOExeStr': "'notepad'"},
{...}]
:param inProcessNameWOExeList: Список процессов, среди которых искать активные. Если параметр не указывать - вернет перечень всех доступных процессов
:return: Сведения о запущенных процессах в следующем формате {
"ProcessWOExeList": ["notepad","..."],
"ProcessWOExeUpperList": ["NOTEPAD","..."],
"ProcessDetailList": [
{
'pid': 412, # Идентификатор процесса
'username': "DESKTOP\\USER",
'name': 'notepad.exe',
'vms': 13.77767775, # В Мб
'NameWOExeUpperStr': 'NOTEPAD',
'NameWOExeStr': "'notepad'"},
{...}]
"""
if inProcessNameWOExeList is None: inProcessNameWOExeList = []
@ -1936,19 +1940,18 @@ def ProcessListGet(inProcessNameWOExeList=None):
def ProcessDefIntervalCall(inDef, inIntervalSecFloat, inIntervalAsyncBool=False, inDefArgList=None, inDefArgDict=None, inDefArgGSettingsNameStr=None, inDefArgLoggerNameStr=None, inExecuteInNewThreadBool=True, inLogger=None, inGSettings = None):
"""
Use this procedure if you need to run periodically some def. Set def, args, interval and enjoy :)
Периодический вызов функции Python.
:param inDef: Функция Python, которую потребуется периодически вызывать
:param inIntervalSecFloat: Интервал между вызовами функции в сек.
:param inIntervalAsyncBool: False - ожидать интервал inIntervalSecFloat только после окончания выполнения предыдущей итерации; True - Ожидать интервал сразу после запуска итерации
:param inDefArgList: Список (list) неименованных аргументов для передачи в функцию. По умолчанию None
:param inDefArgDict: Словарь (dict) именованных аргументов для передачи в функцию. По умолчанию None
:param inDefArgGSettingsNameStr: Наименование аргумента глобального словаря настроек Оркестратора GSettings (опционально)
:param inDefArgLoggerNameStr: Наименование аргумента логгера Оркестратора (опционально)
:param inExecuteInNewThreadBool: True - периодический вызов выполнять в отдельном потоке (не останавливать выполнение текущего потока); False - Выполнение периодического вызова в текущем потоке, в котором была вызвана функция ProcessDefIntervalCall. По умолчанию: True
:param inLogger: Логгер для фиксации сообщений выполнения функции (опционально)
:param inGSettings: Глобальный словарь настроек Оркестратора (синглтон)
:param inDef: def link, which will be called with interval inIntervalSecFloat
:param inIntervalSecFloat: Interval in seconds between call
:param inIntervalAsyncBool: False - wait interval before next call after the previous iteration result; True - wait interval after previous iteration call
:param inDefArgList: List of the args in def. Default None (empty list)
:param inDefArgDict: Dict of the args in def. Default None (empty dict)
:param inDefArgGSettingsNameStr: Name of the GSettings arg name for def (optional)
:param inDefArgLoggerNameStr: Name of the Logger arg name for def (optional). If Use - please check fill of the inLogger arg.
:param inExecuteInNewThreadBool: True - create new thread for the periodic execution; False - execute in current thread. Default: True
:param inLogger: logging def if some case is appear
:return:
"""
inGSettings = GSettingsGet(inGSettings=inGSettings) # Set the global settings
if inLogger is None: inLogger = OrchestratorLoggerGet()
@ -2017,15 +2020,15 @@ def ProcessDefIntervalCall(inDef, inIntervalSecFloat, inIntervalAsyncBool=False,
# Python def - start module function
def PythonStart(inModulePathStr, inDefNameStr, inArgList=None, inArgDict=None, inLogger = None):
"""
Import module and run def in the Orchestrator process.
Импорт модуля и выполнение функции в процессе Оркестратора.
.. note::
Import module will be each time when PythonStart def will be called.
Импорт модуля inModulePathStr будет происходить каждый раз в вызовом функции PythonStart.
.. code-block:: python
# USAGE
# ПРИМЕР
from pyOpenRPA import Orchestrator
Orchestrator.PythonStart(
@ -2033,12 +2036,11 @@ def PythonStart(inModulePathStr, inDefNameStr, inArgList=None, inArgDict=None, i
inDefNameStr="TestDef")
# Import module in Orchestrator process and call def "TestDef" from module "ModuleToCall.py"
:param inModulePathStr: Absolute or relative (working directory of the orchestrator process) path to the importing module .py
:param inDefNameStr: Def name in module
:param inArgList: List of the arguments for callable def
:param inArgDict: Dict of the named arguments for callable def
:param inLogger: Logger instance to log some information when PythonStart def is running
:return: None
:param inModulePathStr: Абсолютный или относительный путь (относительно рабочей директории процесса Оркестратора), по которому расположен импортируемый .py файл
:param inDefNameStr: Наименование функции в модуле .py
:param inArgList: Список (list) неименованных аргументов для передачи в функцию. По умолчанию None
:param inArgDict: Словарь (dict) именованных аргументов для передачи в функцию. По умолчанию None
:param inLogger: Логгер для фиксации сообщений выполнения функции (опционально)
"""
if inLogger is None: inLogger = OrchestratorLoggerGet()
if inArgList is None: inArgList=[]
@ -2053,17 +2055,16 @@ def PythonStart(inModulePathStr, inDefNameStr, inArgList=None, inArgDict=None, i
# # # # # # # # # # # # # # # # # # # # # # #
# Scheduler
# # # # # # # # # # # # # # # # # # # # # # #
def SchedulerActivityTimeAddWeekly(inTimeHHMMStr="23:55:", inWeekdayList=None, inActivityList=None, inGSettings = None):
"""
Add activity item list in scheduler. You can set weekday list and set time when launch. Activity list will be executed at planned time/day.
Добавить активность по расписанию. Допускается указание времени и дней недели, в которые производить запуск.
.. code-block:: python
# USAGE
# ПРИМЕР
from pyOpenRPA import Orchestrator
# EXAMPLE 1
# ВАРИАНТ 1
def TestDef(inArg1Str):
pass
lActivityItem = Orchestrator.ProcessorActivityItemCreate(
@ -2080,10 +2081,9 @@ def SchedulerActivityTimeAddWeekly(inTimeHHMMStr="23:55:", inWeekdayList=None, i
# Activity will be executed at 04:34 Wednesday (2), thursday (3), friday (4)
:param inGSettings: Глобальный словарь настроек Оркестратора (синглтон)
:param inTimeHHMMStr: Activation time from "00:00" to "23:59". Example: "05:29"
:param inWeekdayList: Week day list to initiate activity list. Use int from 0 (monday) to 6 (sunday) as list items. Example: [0,1,2,3,4]. Default value is everyday ([0,1,2,3,4,5,6])
:param inActivityList: Activity list structure
:return: None
:param inTimeHHMMStr: Время запуска активности. Допускаются значения от "00:00" до "23:59". Example: "05:29"
:param inWeekdayList: Список (list) дней недели, в которые выполнять запуск список активностей (ActivityItem list). 0 (понедельник) - 6 (воскресенье). Пример: [0,1,2,3,4]. По умолчанию устанавливается каждый день [0,1,2,3,4,5,6]
:param inActivityList: Список активностей (ActivityItem list) на исполнение
"""
inGSettings = GSettingsGet(inGSettings=inGSettings) # Set the global settings
if inWeekdayList is None: inWeekdayList=[0,1,2,3,4,5,6]
@ -2104,11 +2104,11 @@ def SchedulerActivityTimeAddWeekly(inTimeHHMMStr="23:55:", inWeekdayList=None, i
def RDPTemplateCreate(inLoginStr, inPasswordStr, inHostStr="127.0.0.1", inPortInt = 3389, inWidthPXInt = 1680, inHeightPXInt = 1050,
inUseBothMonitorBool = False, inDepthBitInt = 32, inSharedDriveList=None, inRedirectClipboardBool=True):
"""
Create RDP connect dict item/ Use it connect/reconnect (Orchestrator.RDPSessionConnect)
Создать шаблон подключения RDP (dict). Данный шаблон далее можно использовать в Orchestrator.RDPSessionConnect
.. code-block:: python
# USAGE
# ПРИМЕР
from pyOpenRPA import Orchestrator
lRDPItemDict = Orchestrator.RDPTemplateCreate(
@ -2120,49 +2120,38 @@ def RDPTemplateCreate(inLoginStr, inPasswordStr, inHostStr="127.0.0.1", inPortIn
inHeightPXInt = 1050,
inUseBothMonitorBool = False,
inDepthBitInt = 32,
inSharedDriveList=None)
# lRDPTemplateDict= { # Init the configuration item
# "Host": "127.0.0.1", "Port": "3389", "Login": "USER_99", "Password": "USER_PASS_HERE",
# "Screen": { "Width": 1680, "Height": 1050, "FlagUseAllMonitors": False, "DepthBit": "32" },
# "SharedDriveList": ["c"],
# "RedirectClipboardBool": True, # True - share clipboard to RDP; False - else
# ###### Will updated in program ############
# "SessionHex": "77777sdfsdf77777dsfdfsf77777777", # Hex is created when robot runs, example ""
# "SessionIsWindowExistBool": False, "SessionIsWindowResponsibleBool": False, "SessionIsIgnoredBool": False
# }
:param inLoginStr: User/Robot Login, example "USER_99"
:param inPasswordStr: Password, example "USER_PASS_HERE"
:param inHostStr: Host address, example "77.77.22.22"
:param inPortInt: RDP Port, example "3389" (default)
:param inWidthPXInt: Width of the remote desktop in pixels, example 1680
:param inHeightPXInt: Height of the remote desktop in pixels, example 1050
:param inUseBothMonitorBool: True - connect to the RDP with both monitors. False - else case
:param inDepthBitInt: Remote desktop bitness. Available: 32 or 24 or 16 or 15, example 32
:param inSharedDriveList: Host local disc to connect to the RDP session. Example: ["c", "d"]
:param inRedirectClipboardBool: # True - share clipboard to RDP; False - else
inSharedDriveList=None,
inRedirectClipboardBool=False)
:param inLoginStr: Логин учетной записи, на которую будет происходить вход по RDP
:param inPasswordStr: Пароль учетной записи, на которую будет происходить вход по RDP. !ВНИМАНИЕ! Пароль нигде не сохраняется - конфиденциальность обеспечена
:param inHostStr: Имя хоста, к которому планируется подключение по RDP. Пример "77.77.22.22"
:param inPortInt: RDP порт, по которому будет происходить подключение. По умолчанию 3389 (стандартный порт RDP)
:param inWidthPXInt: Разрешение ширины RDP графической сессии в пикселях. По умолчанию 1680
:param inHeightPXInt: Разрешение высоты RDP графической сессии в пикселях. По умолчанию 1050
:param inUseBothMonitorBool: True - Использовать все подключенные мониторы на RDP сессии; False - Использовать только один монитор на подключенной RDP сессии
:param inDepthBitInt: Глубина цвета на удаленной RDP графической сессии. Допустимые варианты: 32 || 24 || 16 || 15. По умолчанию 32
:param inSharedDriveList: Перечень общих дисков, доступ к которым предоставить на сторону удаленной RDP сессии. Пример: ["c", "d"]
:param inRedirectClipboardBool: True - Синхронизировать буфер обмена между сессией Оркестратора и удаленной RDP сессией; False - Не синхронизировать буфер обмена. По умолчанию True (в целях обратной совместимости). !ВНИМАНИЕ! Для учетных записей роботов мы рекомендуем не синхронизировать буфер обмена, так как это может привести к ошибкам роботов, которые работают с клавиатурой и буфером обмена
:return:
{
"Host": inHostStr, # Host address, example "77.77.22.22"
"Port": str(inPortInt), # RDP Port, example "3389"
"Login": inLoginStr, # Login, example "test"
"Password": inPasswordStr, # Password, example "test"
"Host": inHostStr, # Адрес хоста, пример "77.77.22.22"
"Port": str(inPortInt), # RDP порт, пример "3389"
"Login": inLoginStr, # Логин УЗ, пример "test"
"Password": inPasswordStr, # Пароль УЗ, пример "test"
"Screen": {
"Width": inWidthPXInt, # Width of the remote desktop in pixels, example 1680
"Height": inHeightPXInt, # Height of the remote desktop in pixels, example 1050
# "640x480" or "1680x1050" or "FullScreen". If Resolution not exists set full screen, example
"FlagUseAllMonitors": inUseBothMonitorBool, # True or False, example False
"DepthBit": str(inDepthBitInt) # "32" or "24" or "16" or "15", example "32"
"Width": inWidthPXInt, # Разрешение ширины RDP графической сессии в пикселях. По умолчанию 1680
"Height": inHeightPXInt, Разрешение высоты RDP графической сессии в пикселях. По умолчанию 1050
"FlagUseAllMonitors": inUseBothMonitorBool,
"DepthBit": str(inDepthBitInt)
},
"SharedDriveList": inSharedDriveList, # List of the Root sesion hard drives, example ["c"]
"RedirectClipboardBool": True, # True - share clipboard to RDP; False - else
###### Will updated in program ############
"SessionHex": "77777sdfsdf77777dsfdfsf77777777", # Hex is created when robot runs, example ""
"SharedDriveList": inSharedDriveList,
"RedirectClipboardBool": True,
###### PROGRAM VARIABLE ############
"SessionHex": "77777sdfsdf77777dsfdfsf77777777",
"SessionIsWindowExistBool": False,
# Flag if the RDP window is exist, old name "FlagSessionIsActive". Check every n seconds , example False
"SessionIsWindowResponsibleBool": False,
# Flag if RDP window is responsible (recieve commands). Check every nn seconds. If window is Responsible - window is Exist too , example False
"SessionIsIgnoredBool": False # Flag to ignore RDP window False - dont ignore, True - ignore, example False
"SessionIsIgnoredBool": False
}
"""
@ -2196,27 +2185,22 @@ def RDPTemplateCreate(inLoginStr, inPasswordStr, inHostStr="127.0.0.1", inPortIn
# TODO Search dublicates in GSettings RDPlist !
# Return list if dublicates
def RDPSessionDublicatesResolve(inGSettings):
"""
DEVELOPING Search duplicates in GSettings RDPlist
!def is developing!
:param inGSettings: Глобальный словарь настроек Оркестратора (синглтон)
:return:
"""
pass
#for lItemKeyStr in inGSettings["RobotRDPActive"]["RDPList"]:
# lItemDict = inGSettings["RobotRDPActive"]["RDPList"][lItemKeyStr]
def RDPSessionConnect(inRDPSessionKeyStr, inRDPTemplateDict=None, inHostStr=None, inPortStr=None, inLoginStr=None, inPasswordStr=None, inGSettings = None, inRedirectClipboardBool=True):
"""
Create new RDPSession in RobotRDPActive. Attention - activity will be ignored if RDP key is already exists
2 way of the use
Var 1 (Main stream): inGSettings, inRDPSessionKeyStr, inRDPTemplateDict
Var 2 (Backward compatibility): inGSettings, inRDPSessionKeyStr, inHostStr, inPortStr, inLoginStr, inPasswordStr
Выполнить подключение к RDP и следить за стабильностью соединения со стороны Оркестратора.
!ВНИМАНИЕ! - Подключение будет проигнорировано, если соединение по таком RDP ключу уже было инициализировано ранее.
2 способа использования функции:
ВАРИАНТ 1 (ОСНОВНОЙ): inGSettings, inRDPSessionKeyStr, inRDPTemplateDict. Для получения inRDPTemplateDict см. функцию Orchestrator.RDPTemplateCreate
ВАРИАНТ 2 (ОБРАТНАЯ СОВМЕСТИМОСТЬ ДО ВЕРСИИ 1.1.20): inGSettings, inRDPSessionKeyStr, inHostStr, inPortStr, inLoginStr, inPasswordStr
.. code-block:: python
# USAGE
# ПРИМЕР (ВАРИАНТ 1)
from pyOpenRPA import Orchestrator
lRDPItemDict = Orchestrator.RDPTemplateCreate(
@ -2228,15 +2212,15 @@ def RDPSessionConnect(inRDPSessionKeyStr, inRDPTemplateDict=None, inHostStr=None
inRDPSessionKeyStr = "RDPKey",
inRDPTemplateDict = lRDPItemDict)
# Orchestrator will create RDP session by the lRDPItemDict configuration
:param inRDPSessionKeyStr: Ключ RDP сессии - необходим для дальнейшей идентификации
:param inRDPTemplateDict: Конфигурационный словарь (dict) RDP подключения (см. функцию Orchestrator.RDPTemplateCreate)
:param inLoginStr: Логин учетной записи, на которую будет происходить вход по RDP. Обратная совместимость до версии v 1.1.20. Мы рекомендуем использовать inRDPTemplateDict (см. функцию Orchestrator.RDPTemplateCreate)
:param inPasswordStr: Пароль учетной записи, на которую будет происходить вход по RDP. !ВНИМАНИЕ! Пароль нигде не сохраняется - конфиденциальность обеспечена. Обратная совместимость до версии v 1.1.20. Мы рекомендуем использовать inRDPTemplateDict (см. функцию Orchestrator.RDPTemplateCreate)
:param inHostStr: Имя хоста, к которому планируется подключение по RDP. Пример "77.77.22.22". Обратная совместимость до версии v 1.1.20. Мы рекомендуем использовать inRDPTemplateDict (см. функцию Orchestrator.RDPTemplateCreate)
:param inPortInt: RDP порт, по которому будет происходить подключение. По умолчанию 3389 (стандартный порт RDP). Обратная совместимость до версии v 1.1.20. Мы рекомендуем использовать inRDPTemplateDict (см. функцию Orchestrator.RDPTemplateCreate)
:param inGSettings: Глобальный словарь настроек Оркестратора (синглтон)
:param inRDPSessionKeyStr: RDP Session string key - need for the further identification
:param inRDPTemplateDict: RDP configuration dict with settings (see def Orchestrator.RDPTemplateCreate)
:param inHostStr: Backward compatibility from Orchestrator v 1.1.20. Use inRDPTemplateDict
:param inPortStr: Backward compatibility from Orchestrator v 1.1.20. Use inRDPTemplateDict
:param inLoginStr: Backward compatibility from Orchestrator v 1.1.20. Use inRDPTemplateDict
:param inPasswordStr: Backward compatibility from Orchestrator v 1.1.20. Use inRDPTemplateDict
:return: True every time :)
:param inRedirectClipboardBool: True - Синхронизировать буфер обмена между сессией Оркестратора и удаленной RDP сессией; False - Не синхронизировать буфер обмена. По умолчанию True (в целях обратной совместимости). !ВНИМАНИЕ! Для учетных записей роботов мы рекомендуем не синхронизировать буфер обмена, так как это может привести к ошибкам роботов, которые работают с клавиатурой и буфером обмена
"""
inGSettings = GSettingsGet(inGSettings=inGSettings) # Set the global settings
# Check thread
@ -2269,11 +2253,11 @@ def RDPSessionConnect(inRDPSessionKeyStr, inRDPTemplateDict=None, inHostStr=None
def RDPSessionDisconnect(inRDPSessionKeyStr, inBreakTriggerProcessWOExeList = None, inGSettings = None):
"""
Disconnect the RDP session and stop monitoring it.
Выполнить отключение RDP сессии и прекратить мониторить его активность.
.. code-block:: python
# USAGE
# ПРИМЕР
from pyOpenRPA import Orchestrator
Orchestrator.RDPSessionDisconnect(
@ -2281,14 +2265,9 @@ def RDPSessionDisconnect(inRDPSessionKeyStr, inBreakTriggerProcessWOExeList = No
inRDPSessionKeyStr = "RDPKey")
# Orchestrator will disconnect RDP session and will stop to monitoring current RDP
:param inRDPSessionKeyStr: Ключ RDP сессии - необходим для дальнейшей идентификации
:param inBreakTriggerProcessWOExeList: Список процессов, наличие которых в диспетчере задач приведет к прерыванию задачи по остановке RDP соединения. Пример ["notepad"]
:param inGSettings: Глобальный словарь настроек Оркестратора (синглтон)
:param inRDPSessionKeyStr: RDP Session string key - need for the further identification
:param inBreakTriggerProcessWOExeList: List of the processes, which will stop the execution. Example ["notepad"]
.. note::
Orchestrator look processes on the current machine
:return: True every time
"""
inGSettings = GSettingsGet(inGSettings=inGSettings) # Set the global settings
if inBreakTriggerProcessWOExeList is None: inBreakTriggerProcessWOExeList = []
@ -2317,11 +2296,11 @@ def RDPSessionDisconnect(inRDPSessionKeyStr, inBreakTriggerProcessWOExeList = No
def RDPSessionReconnect(inRDPSessionKeyStr, inRDPTemplateDict=None, inGSettings = None):
"""
Reconnect the RDP session
Выполнить переподключение RDP сессии и продолжить мониторить его активность.
.. code-block:: python
# USAGE
# ПРИМЕР
from pyOpenRPA import Orchestrator
lRDPItemDict = Orchestrator.RDPTemplateCreate(
@ -2334,10 +2313,9 @@ def RDPSessionReconnect(inRDPSessionKeyStr, inRDPTemplateDict=None, inGSettings
inRDPTemplateDict = inRDPTemplateDict)
# Orchestrator will reconnect RDP session and will continue to monitoring current RDP
:param inRDPSessionKeyStr: Ключ RDP сессии - необходим для дальнейшей идентификации
:param inRDPTemplateDict: Конфигурационный словарь (dict) RDP подключения (см. функцию Orchestrator.RDPTemplateCreate)
:param inGSettings: Глобальный словарь настроек Оркестратора (синглтон)
:param inRDPSessionKeyStr: RDP Session string key - need for the further identification
:param inRDPTemplateDict: RDP configuration dict with settings (see def Orchestrator.RDPTemplateCreate)
:return:
"""
inGSettings = GSettingsGet(inGSettings=inGSettings) # Set the global settings
# Check thread
@ -2364,11 +2342,11 @@ def RDPSessionReconnect(inRDPSessionKeyStr, inRDPTemplateDict=None, inGSettings
def RDPSessionMonitorStop(inRDPSessionKeyStr, inGSettings = None):
"""
Stop monitoring the RDP session by the Orchestrator process. Current def don't kill RDP session - only stop to track it (it can give )
Прекратить мониторить активность RDP соединения со стороны Оркестратора. Данная функция не уничтожает активное RDP соединение.
.. code-block:: python
# USAGE
# ПРИМЕР
from pyOpenRPA import Orchestrator
Orchestrator.RDPSessionMonitorStop(
@ -2376,9 +2354,8 @@ def RDPSessionMonitorStop(inRDPSessionKeyStr, inGSettings = None):
inRDPSessionKeyStr = "RDPKey")
# Orchestrator will stop the RDP monitoring
:param inRDPSessionKeyStr: Ключ RDP сессии - необходим для дальнейшей идентификации
:param inGSettings: Глобальный словарь настроек Оркестратора (синглтон)
:param inRDPSessionKeyStr: RDP Session string key - need for the further identification
:return: True every time :>
"""
inGSettings = GSettingsGet(inGSettings=inGSettings) # Set the global settings
lResult = True
@ -2387,11 +2364,11 @@ def RDPSessionMonitorStop(inRDPSessionKeyStr, inGSettings = None):
def RDPSessionLogoff(inRDPSessionKeyStr, inBreakTriggerProcessWOExeList = None, inGSettings = None):
"""
Logoff the RDP session from the Orchestrator process (close all apps in session when logoff)
Выполнить отключение (logoff) на RDP сессии и прекратить мониторить активность со стороны Оркестратора.
.. code-block:: python
# USAGE
# ПРИМЕР
from pyOpenRPA import Orchestrator
Orchestrator.RDPSessionLogoff(
@ -2400,10 +2377,11 @@ def RDPSessionLogoff(inRDPSessionKeyStr, inBreakTriggerProcessWOExeList = None,
inBreakTriggerProcessWOExeList = ['Notepad'])
# Orchestrator will logoff the RDP session
:param inRDPSessionKeyStr: Ключ RDP сессии - необходим для дальнейшей идентификации
:param inBreakTriggerProcessWOExeList: Список процессов, наличие которых в диспетчере задач приведет к прерыванию задачи по остановке RDP соединения. Пример ["notepad"]
:param inGSettings: Глобальный словарь настроек Оркестратора (синглтон)
:param inRDPSessionKeyStr: RDP Session string key - need for the further identification
:param inBreakTriggerProcessWOExeList: List of the processes, which will stop the execution. Example ["notepad"]
:return: True - logoff is successful
:return: True - Отключение прошло успешно; False - были зафиксированы ошибки при отключении.
"""
inGSettings = GSettingsGet(inGSettings=inGSettings) # Set the global settings
if inBreakTriggerProcessWOExeList is None: inBreakTriggerProcessWOExeList = []
@ -2434,13 +2412,6 @@ def RDPSessionLogoff(inRDPSessionKeyStr, inBreakTriggerProcessWOExeList = None,
return lResult
def RDPSessionResponsibilityCheck(inRDPSessionKeyStr, inGSettings = None):
"""
DEVELOPING, MAYBE NOT USEFUL Check RDP Session responsibility TODO NEED DEV + TEST
:param inGSettings: Глобальный словарь настроек Оркестратора (синглтон)
:param inRDPSessionKeyStr: RDP Session string key - need for the further identification
:return: True every time
"""
inGSettings = GSettingsGet(inGSettings=inGSettings) # Set the global settings
# Check thread
if not Core.IsProcessorThread(inGSettings=inGSettings):
@ -2479,11 +2450,13 @@ def RDPSessionResponsibilityCheck(inRDPSessionKeyStr, inGSettings = None):
def RDPSessionProcessStartIfNotRunning(inRDPSessionKeyStr, inProcessNameWEXEStr, inFilePathStr, inFlagGetAbsPathBool=True, inGSettings = None):
"""
Start process in RDP if it is not running (check by the arg inProcessNameWEXEStr)
Выполнить запуск процесса на RDP сессии через графические UI инструменты (без Агента).
!ВНИМАНИЕ! Данная функция может работать нестабильно из-за использования графических элементов UI при работе с RDP. Мы рекомендуем использовать конструкцию взаимодействия Оркестратора с Агентом.
.. code-block:: python
# USAGE
# ПРИМЕР
from pyOpenRPA import Orchestrator
Orchestrator.RDPSessionProcessStartIfNotRunning(
@ -2494,12 +2467,11 @@ def RDPSessionProcessStartIfNotRunning(inRDPSessionKeyStr, inProcessNameWEXEStr,
inFlagGetAbsPathBool = True)
# Orchestrator will start the process in RDP session
:param inRDPSessionKeyStr: Ключ RDP сессии - необходим для дальнейшей идентификации
:param inProcessNameWEXEStr: Наименование процесса с расширением .exe (WEXE - WITH EXE - С EXE). Параметр позволяет не допустить повторного запуска процесса, если он уже был запущен. Example: "Notepad.exe"
:param inFilePathStr: Путь к файлу запуска процесса на стороне RDP сессии
:param inFlagGetAbsPathBool: True - Преобразовать относительный путь inFilePathStr в абсолютный с учетом рабочей директории Оркестратора; False - Не выполнять преобразований
:param inGSettings: Глобальный словарь настроек Оркестратора (синглтон)
:param inRDPSessionKeyStr: RDP Session string key - need for the further identification
:param inProcessNameWEXEStr: Process name with extension (.exe). This arg allow to check the process is running. Example: "Notepad.exe"
:param inFilePathStr: Path to run process if it is not running.
:param inFlagGetAbsPathBool: True - get abs path from the relative path in inFilePathStr. False - else case
:return: True every time :)
"""
inGSettings = GSettingsGet(inGSettings=inGSettings) # Set the global settings
# Check thread
@ -2526,11 +2498,13 @@ def RDPSessionProcessStartIfNotRunning(inRDPSessionKeyStr, inProcessNameWEXEStr,
def RDPSessionCMDRun(inRDPSessionKeyStr, inCMDStr, inModeStr="CROSSCHECK", inGSettings = None):
"""
Send CMD command to the RDP session "RUN" window
Отправить CMD команду на удаленную сесиию через RDP окно (без Агента).
!ВНИМАНИЕ! Данная функция может работать нестабильно из-за использования графических элементов UI при работе с RDP. Мы рекомендуем использовать конструкцию взаимодействия Оркестратора с Агентом.
.. code-block:: python
# USAGE
# ПРИМЕР
from pyOpenRPA import Orchestrator
lResultDict = Orchestrator.RDPSessionCMDRun(
@ -2538,18 +2512,18 @@ def RDPSessionCMDRun(inRDPSessionKeyStr, inCMDStr, inModeStr="CROSSCHECK", inGSe
inRDPSessionKeyStr = "RDPKey",
inModeStr = 'LISTEN')
# Orchestrator will send CMD to RDP and return the result (see return section)
:param inRDPSessionKeyStr: Ключ RDP сессии - необходим для дальнейшей идентификации
:param inCMDStr: Команда CMD, которую отправить на удаленную сессию
:param inModeStr: По умолчанию "CROSSCHECK". Варианты:
"LISTEN" - Получить результат выполнения операции. Внимание! необходим общий буфер обмена с сессией Оркестратора!
"CROSSCHECK" - Выполнить проверку, что операция была выполнена (без получения результата отработки CMD команды). Внимание! необходим общий буфер обмена с сессией Оркестратора!
"RUN" - Не получать результат и не выполнять проверку
:param inGSettings: Глобальный словарь настроек Оркестратора (синглтон)
:param inRDPSessionKeyStr: RDP Session string key - need for the further identification
:param inCMDStr: Any CMD string
:param inModeStr: Variants:
"LISTEN" - Get result of the cmd command in result;
"CROSSCHECK" - Check if the command was successfully sent
"RUN" - Run without crosscheck and get clipboard
:return: # OLD > True - CMD was executed successfully
:return: Результат выполнения операции в соответсвии с параметрами инициализации функции. Выходная структура:
{
"OutStr": <> # Result string
"IsResponsibleBool": True|False # Flag is RDP is responsible - works only when inModeStr = CROSSCHECK
"OutStr": <> # Результат выполнения CMD (если inModeStr = "LISTEN")
"IsResponsibleBool": True|False # True - RDP приняло команду; False - обратная связь не была получена (если inModeStr = "CROSSCHECK")
}
"""
inGSettings = GSettingsGet(inGSettings=inGSettings) # Set the global settings
@ -2580,11 +2554,13 @@ def RDPSessionCMDRun(inRDPSessionKeyStr, inCMDStr, inModeStr="CROSSCHECK", inGSe
def RDPSessionProcessStop(inRDPSessionKeyStr, inProcessNameWEXEStr, inFlagForceCloseBool, inGSettings = None):
"""
Send CMD command to the RDP session "RUN" window.
Отправка CMD команды в RDP окне на остановку процесса (без Агента).
!ВНИМАНИЕ! Данная функция может работать нестабильно из-за использования графических элементов UI при работе с RDP. Мы рекомендуем использовать конструкцию взаимодействия Оркестратора с Агентом.
.. code-block:: python
# USAGE
# ПРИМЕР
from pyOpenRPA import Orchestrator
lResultDict = Orchestrator.RDPSessionProcessStop(
@ -2594,11 +2570,11 @@ def RDPSessionProcessStop(inRDPSessionKeyStr, inProcessNameWEXEStr, inFlagForceC
inFlagForceCloseBool = True)
# Orchestrator will send CMD to RDP and return the result (see return section)
:param inRDPSessionKeyStr: Ключ RDP сессии - необходим для дальнейшей идентификации
:param inProcessNameWEXEStr: Наименование процесса, который требуется выключить с расширением .exe (WEXE - WITH EXE - С EXE). Пример: "Notepad.exe"
:param inFlagForceCloseBool: True - Принудительное отключение. False - Отправка сигнала на безопасное отключение (если процесс поддерживает)
:param inGSettings: Глобальный словарь настроек Оркестратора (синглтон)
:param inRDPSessionKeyStr: RDP Session string key - need for the further identification
:param inProcessNameWEXEStr: Process name to kill. Example: 'notepad.exe'
:param inFlagForceCloseBool: True - force close the process. False - safe close the process
:return: True every time
"""
inGSettings = GSettingsGet(inGSettings=inGSettings) # Set the global settings
# Check thread
@ -2626,11 +2602,15 @@ def RDPSessionProcessStop(inRDPSessionKeyStr, inProcessNameWEXEStr, inFlagForceC
def RDPSessionFileStoredSend(inRDPSessionKeyStr, inHostFilePathStr, inRDPFilePathStr, inGSettings = None):
"""
Send file from Orchestrator session to the RDP session using shared drive in RDP (see RDP Configuration Dict, Shared drive)
Отправка файла со стороны Оркестратора на сторону RDP сессии через UI инструменты RDP окна (без Агента).
!ВНИМАНИЕ! Данная функция может работать нестабильно из-за использования графических элементов UI при работе с RDP. Мы рекомендуем использовать конструкцию взаимодействия Оркестратора с Агентом.
!ВНИМАНИЕ! Для работы функции требуется открыть доступ по RDP к тем дискам, с которых будет производится копирование файла.
.. code-block:: python
# USAGE
# ПРИМЕР
from pyOpenRPA import Orchestrator
lResultDict = Orchestrator.RDPSessionFileStoredSend(
@ -2640,11 +2620,10 @@ def RDPSessionFileStoredSend(inRDPSessionKeyStr, inHostFilePathStr, inRDPFilePat
inRDPFilePathStr = "C:\\RPA\\TESTDIR\\Test.py")
# Orchestrator will send CMD to RDP and return the result (see return section)
:param inRDPSessionKeyStr: Ключ RDP сессии - необходим для дальнейшей идентификации
:param inHostFilePathStr: Откуда взять файл. Относительный или абсолютный путь к файлу на стороне Оркестратора. Пример: "TESTDIR\\Test.py"
:param inRDPFilePathStr: Куда скопировать файл. !Абсолютный! путь на стороне RDP сессии. Пример: "C:\\RPA\\TESTDIR\\Test.py"
:param inGSettings: Глобальный словарь настроек Оркестратора (синглтон)
:param inRDPSessionKeyStr: RDP Session string key - need for the further identification
:param inHostFilePathStr: Relative or absolute path to the file location on the Orchestrator side. Example: "TESTDIR\\Test.py"
:param inRDPFilePathStr: !Absolute! path to the destination file location on the RDP side. Example: "C:\\RPA\\TESTDIR\\Test.py"
:return: True every time
"""
inGSettings = GSettingsGet(inGSettings=inGSettings) # Set the global settings
# Check thread
@ -2671,11 +2650,15 @@ def RDPSessionFileStoredSend(inRDPSessionKeyStr, inHostFilePathStr, inRDPFilePat
def RDPSessionFileStoredRecieve(inRDPSessionKeyStr, inRDPFilePathStr, inHostFilePathStr, inGSettings = None):
"""
Recieve file from RDP session to the Orchestrator session using shared drive in RDP (see RDP Configuration Dict, Shared drive)
Получение файла со стороны RDP сессии на сторону Оркестратора через UI инструменты RDP окна (без Агента).
!ВНИМАНИЕ! Данная функция может работать нестабильно из-за использования графических элементов UI при работе с RDP. Мы рекомендуем использовать конструкцию взаимодействия Оркестратора с Агентом.
!ВНИМАНИЕ! Для работы функции требуется открыть доступ по RDP к тем дискам, с которых будет производится копирование файла.
.. code-block:: python
# USAGE
# ПРИМЕР
from pyOpenRPA import Orchestrator
lResultDict = Orchestrator.RDPSessionFileStoredRecieve(
@ -2685,11 +2668,10 @@ def RDPSessionFileStoredRecieve(inRDPSessionKeyStr, inRDPFilePathStr, inHostFile
inRDPFilePathStr = "C:\\RPA\\TESTDIR\\Test.py")
# Orchestrator will send CMD to RDP and return the result (see return section)
:param inRDPSessionKeyStr: Ключ RDP сессии - необходим для дальнейшей идентификации
:param inRDPFilePathStr: Откуда скопировать файл. !Абсолютный! путь на стороне RDP сессии. Пример: "C:\\RPA\\TESTDIR\\Test.py"
:param inHostFilePathStr: Куда скопировать файл. Относительный или абсолютный путь к файлу на стороне Оркестратора. Пример: "TESTDIR\\Test.py"
:param inGSettings: Глобальный словарь настроек Оркестратора (синглтон)
:param inRDPSessionKeyStr: RDP Session string key - need for the further identification
:param inRDPFilePathStr: !Absolute! path to the destination file location on the RDP side. Example: "C:\\RPA\\TESTDIR\\Test.py"
:param inHostFilePathStr: Relative or absolute path to the file location on the Orchestrator side. Example: "TESTDIR\\Test.py"
:return: True every time
"""
inGSettings = GSettingsGet(inGSettings=inGSettings) # Set the global settings
# Check thread
@ -2717,13 +2699,8 @@ def RDPSessionFileStoredRecieve(inRDPSessionKeyStr, inRDPFilePathStr, inHostFile
# # # # # Start orchestrator
# # # # # # # # # # # # # # # # # # # # # # #
#HIDDEN Interval gSettings auto cleaner def to clear some garbage.
def GSettingsAutocleaner(inGSettings=None):
"""
HIDDEN Interval gSettings auto cleaner def to clear some garbage.
:param inGSettings: Глобальный словарь настроек Оркестратора (синглтон)
:return: None
"""
inGSettings = GSettingsGet(inGSettings=inGSettings) # Set the global settings
while True:
time.sleep(inGSettings["Autocleaner"]["IntervalSecFloat"]) # Wait for the next iteration
@ -2752,23 +2729,15 @@ def GSettingsAutocleaner(inGSettings=None):
from .. import __version__ # Get version from the package
def Start(inDumpRestoreBool = True, inRunAsAdministratorBool = True):
"""
Start the orchestrator threads execution
:param inDumpRestoreBool: True - restore data from the dumo
:param inRunAsAdministratorBool: True - rerun as admin if not
:return:
"""
Orchestrator(inDumpRestoreBool = True, inRunAsAdministratorBool = True)
def Orchestrator(inGSettings=None, inDumpRestoreBool = True, inRunAsAdministratorBool = True):
"""
Main def to start orchestrator
Инициализация ядра Оркестратора (всех потоков)
:param inGSettings: Глобальный словарь настроек Оркестратора (синглтон)
:param inDumpRestoreBool:
:param inRunAsAdministratorBool:
:return:
:param inDumpRestoreBool: True - Восстановить информацию о RDP сессиях и StorageDict; False - не восстанавливать
:param inRunAsAdministratorBool: True - Проверить права администратратора и обеспечить их; False - Не обеспечивать права администратора
"""
lL = inGSettings["Logger"]
# https://stackoverflow.com/questions/130763/request-uac-elevation-from-within-a-python-script
@ -2853,8 +2822,6 @@ def Orchestrator(inGSettings=None, inDumpRestoreBool = True, inRunAsAdministrato
lRobotRDPActiveThread.start() # Start the thread execution.
if lL: lL.info("Robot RDP active has been started") #Logging
# Init autocleaner in another thread
lAutocleanerThread = threading.Thread(target= GSettingsAutocleaner, kwargs={"inGSettings":gSettingsDict})
lAutocleanerThread.daemon = True # Run the thread in daemon mode.

Loading…
Cancel
Save