@ -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 = " %u sername % " ) :
"""
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 : Наименование пользователя , под именем которого искать процесс для остановки . По умолчанию " %u sername % " - искать процесс на текущей сессии
"""
# 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.