Форум сайта python.su
0
Добрый день други!
Появилось несколько вопросов по автоматизации в условиях задачи
Дано:
1. ОС Windows
2.Программа на Java, в консоли которой появляются сообщения о событиях, которые необходимо забирать в буфер обмена и обрабатывать(реализуется с помощью pywinauto посылкой кнопок сtrl+a, ctrl+c, и модуля pyperclip).
3. Сайт написанный на Java.
Надо:
1. обрабатывать сообщения из программы о событиях (копировать все событие полностью, разбивать на части из определенной колонки брать ключевую информацию.)
2. Сайт написанный на Java предоставляет доступ к некоторой базе, и в этой базе надо искать информацию по ключевым значениям.
С первым пунктом худо бедно разобрался и реализовал, но хотелось бы его допилить, а именно запуск проги на Java в скрытом(тихом) режиме, через модуль subprocess это возможно.
Вопрос заключается в следующем возможно ли из этого скрытого процесса выцеплять информацию по событиям(возможности пока проверить нету потому и спрашиваю)?
pywinauto если не вмешиваться в работу нормально работает, но во время работы скрипта нельзя будет ни почту почитать, ни поработать, вариант с виртуалкой не катит!!!
Со вторым полная засада, не знаю с чего начать надо логинится на внутреннем сайте через SSL нужен совет какие модули использовать, имеется ли литература конкретно потому как этот процесс происходит?
Если есть у кого то мысли прошу поделится по выше написанному, заранее благодарю…
Отредактировано angree77 (Июль 9, 2019 13:20:28)
Офлайн
221
2) обычно все вопросы решает модуль requests
Офлайн
0
JOHN_16Спасибо
2) обычно все вопросы решает модуль requests
Отредактировано angree77 (Июль 9, 2019 19:13:42)
Офлайн
253
angree77Таких слов не знаем.
не подростается запустить ее…
angree77pywinauto тут вреден и совершенно не нужен. надо в supprocess прицепиться к выходному потоку программы. (см. PIPE в документации).
в модуле pywinauto
angree77При таком описании как вы думаете что вам посоветуют? Правильно, посоветуют подробнее описать ситуацию.
Сайт написанный на Java предоставляет доступ к некоторой базе, и в этой базе надо искать информацию по ключевым значениям.
Отредактировано doza_and (Июль 9, 2019 21:12:26)
Офлайн
0
doza_andСпасибо друг!
Все нормально с любым количеством аргументов через subprocess пускается. Попробуйте распрямить руки или пишите сюда содержимое батника и как вы пускаете.
Отредактировано angree77 (Июль 9, 2019 22:26:46)
Офлайн
0
Вот собственно сама портянка запускающая java
@echo off
::
:: Batch file to run HP Operations Java Console
::
:: Some remarks on the startup arguments:
:: ======================================
::
:: * use -user <some_name> if you want to have
:: a default user <some_name> in your login window
::
:: * use -passwd <password> to start JavaGUI directly,
:: without the login window; the USER argument
:: should be also specified
::
:: * use -trace to enable tracing into the
:: MS-DOS console window which hosts the Java Console
:: NOTE: This parameter cannot be used together with JAVA=javaw
::
:: * use -nowin to start the JavaGUI without a DOS window
::
:: * use -server <hostname> to have a default ITO server
:: in the login window
:: You may also set an environment variable ITOSERVER
:: in your system or specify the name of the server
:: as first parameter starting this script.
::
:: * use -plugin if you want to start JavaGUI as a plugin
::
:: * use -apisid to manually specify the session ID for
:: the particular Java GUI instance
::
:: * use -locale <locale string> to specify a locale setting
:: for JavaGUI at startup
::
:: * use -max_limited_messages <NUMBER> to specify the number of messages
:: visible in message browsers
::
:: * use -refresh_interval <REFRESH> to set the JavaGUI refresh interval
:: in seconds
::
:: * use -https to enable secure Https communication between
:: JavaGUI and server
::
:: * use -bbc.http:<PARAMETER> to configure BBC communication layer
:: properties. E.g. use -bbc.http:proxy to set the proxy server
:: for the Https communication
::
:: * use -port <PORT_NUMBER> to configure a port for JavaGUI non-secure communication
:: Default port number is 2531.
:: It is also possible to specify the port as part of the hostname
:: e.g. -server <hostname:port> .
::
:: * use -config <path/filename> to define custom filename
:: for JavaGUI console settings file
::
:: * use -version to print JavaGUI version without start the JavaGUI
::
:: * use -gui.<PARAMETER> to configure CGI startup parameters
:: E.g. use -gui.msgbrw.filter.nodes to set nodes in message browser filter
::
:: * use -disableD3D to disable Direct3D for Java (only needed in case of some Graphic Card Driver problems)
::
:: * use -timezone <in Continent|Ocean/City format> to define custom timezone
:: for JavaGUI
::
:: * use -maxperm to set maximum permanent memory for JVM, which is used for literal strings and classloader (kind of static memory storage)
:: default value of 128m should be fine for most situations
::
:: * use -maxheap to set maximum heap memory for JVM, used as storage for dynamically created objects
:: for bigger environments (higher number of messages, services, nodes, applications, annotations, etc.)
:: it is necessary to increase the max heap memory for Java UI to be able to keep all objects in the heap
::
:: * NOTE that all the options from the itooprc file
:: in the users home directory have a lower priority.
:: The values from this script will be used if
:: something is specified here.
::
set THIS=%0
if "%~1"=="" goto EMPTY
if "%1"=="}{" goto SETVARS
:EMPTY
set bk_path=%PATH%
set PATH=%PATH%;.
set bk_user=%USER%
set bk_passwd=%PASSWD%
set bk_trace=%TRACE%
set bk_java=%JAVA%
set bk_itoserver=%ITOSERVER%
set bk_plugin=%PLUGIN%
set bk_display=%DISPLAY%
set bk_help=""
set bk_apiport=%APIPORT%
set bk_apisid=%APISID%
set bk_locale=%LOCALE%
set bk_max_limited_messages=%MAX_LIMITED_MESSAGES%
set bk_refresh_interval=%REFRESH_INTERVAL%
set bk_https=%HTTPS%
set bk_port=%PORT%
set bk_config=%CONFIG%
set bk_version=%VERSION%
set bk_timezone=%TIMEZONE%
set bk_maxperm=%MAXPERM%
set bk_maxheap=%MAXHEAP%
set bk_dll_path=%DLL_PATH%
set START=
set SERVERSET=
set BBCPARM=
set CGIPARM=
set JAVAPARM=
if "%JAVA%" == "javaw" set START=start
if not "%JAVA%" == "javaw" set JAVA=java
set CLASSPATH=.\ito_op.jar;.\ito_op_addon.jar;.\ito_ssl.jar
if "%VERSION%" == "" set VERSION=false
if "%MAXPERM%" == "" set MAXPERM=128m
if "%MAXHEAP%" == "" set MAXHEAP=512m
:: Processing command-line parameters
:EVAL1
if "%~1" == "" goto ON
for %%p in (-user -passwd -trace -nosec -server -display -plugin -nowin -help -apiport -apisid -locale -max_limited_messages -refresh_interval -https -port -config -version -disableD3D -timezone -maxperm -maxheap -dll_path) do if "%%p"=="%1" goto EVAL3
echo %1 | find /i "-bbc.http:" > NUL
if errorlevel 1 goto EVAL4
set CONVBBC=%1
set BBCPARM=%BBCPARM% %CONVBBC:-=%=%2
set CONVBBC=
:EVAL4
echo %1 | find /i "-gui." > NUL
if errorlevel 1 goto EVAL2
set CONVCGI=%1
set CGIPARM=%CGIPARM% %CONVCGI:-=%=%2
set CONVCGI=
:EVAL3
call %THIS% }{ %1 %2
:EVAL2
if "%SERVERSET%" == "" set ITOSERVER=%1
shift
goto EVAL1
:ON
if "%bk_help%" == "true" goto END
:: Starting JavaGUI
:: Checking java version by using jre folder name.
:: Java 8 is ignoring MaxPermSize.
for /D %%A in ("jre*") do set JREVERS=%%A
set NUMJREVERS=%JREVERS:~3,-1%
for %%p in (true TRUE on ON yes YES) do if "%%p"=="%TRACE%" echo on
for %%p in (true TRUE on ON yes YES) do if "%%p"=="%PLUGIN%" goto :PLUGIN
:: If java is version 8 or bigger version number
if "%NUMJREVERS%" GEQ "8" (
%START% .\jre%NUMJREVERS%\bin\%JAVA% -Xmx%MAXHEAP% com.hp.ov.it.ui.OvEmbApplet initial_node=%ITOSERVER% user=%USER% passwd=%PASSWD% port=%PORT% trace=%TRACE% display=%DISPLAY% locale=%LOCALE% max_limited_messages=%MAX_LIMITED_MESSAGES% refresh_interval=%REFRESH_INTERVAL% apiport=%APIPORT% apisid=%APISID% https=%HTTPS% config=%CONFIG% version=%VERSION% dll_path=%DLL_PATH% timezone=%TIMEZONE% %BBCPARM% %CGIPARM%
) else (
%START% .\jre7\bin\%JAVA% -XX:MaxPermSize=%MAXPERM% -Xmx%MAXHEAP% com.hp.ov.it.ui.OvEmbApplet initial_node=%ITOSERVER% user=%USER% passwd=%PASSWD% port=%PORT% trace=%TRACE% display=%DISPLAY% locale=%LOCALE% max_limited_messages=%MAX_LIMITED_MESSAGES% refresh_interval=%REFRESH_INTERVAL% apiport=%APIPORT% apisid=%APISID% https=%HTTPS% config=%CONFIG% version=%VERSION% dll_path=%DLL_PATH% timezone=%TIMEZONE% %BBCPARM% %CGIPARM%
)
goto END
:PLUGIN
echo Plugin
ito_op_applet.html
goto END
:SETVARS
set SERVERSET="1"
if "%2"=="-nowin" goto NOWIN
if "%2"=="-plugin" set PLUGIN=true
if "%2"=="-user" set USER=%3
if "%2"=="-passwd" set PASSWD=%3
if "%2"=="-trace" set TRACE=true
if "%2"=="-nosec" set CLASSPATH=.\ito_op.jar;.\ito_op_addon.jar
if "%2"=="-server" set ITOSERVER=%3
if "%2"=="-display" set DISPLAY=%3
if "%2"=="-help" goto USAGE
if "%2"=="-h" goto USAGE
if "%2"=="-apiport" set APIPORT=%3
if "%2"=="-apisid" set APISID=%3
if "%2"=="-locale" set LOCALE=%3
if "%2"=="-max_limited_messages" set MAX_LIMITED_MESSAGES=%3
if "%2"=="-refresh_interval" set REFRESH_INTERVAL=%3
if "%2"=="-https" set HTTPS=%3
if "%2"=="-port" set PORT=%3
if "%2"=="-config" set CONFIG=%3
if "%2"=="-version" set VERSION=true
if "%2"=="-disableD3D" set JAVAPARM=%JAVAPARM% -Dsun.java2d.d3d=false
if "%2"=="-timezone" set TIMEZONE=%3
if "%2"=="-maxperm" set MAXPERM=%3
if "%2"=="-maxheap" set MAXHEAP=%3
if "%2"=="-dll_path" set DLL_PATH=%3
goto SETEND
:NOWIN
set JAVA=javaw
set START=start
goto SETEND
:SETEND
goto EXIT
:USAGE
set bk_help=true
echo Usage: ito_op.bat [hostname] [-parameter value]
echo.
echo HP Operations Manager Java-based Operator GUI can be
echo started with the server hostname as the first parameter.
echo You can also select from the following parameters:
echo -user "<username>" ... username for login
echo -passwd "<password>" ... password for login
echo -server "<hostname>" ... default server for login (same as first parameter)
echo -port "<PORT>" ... sets port for socket communication
echo -display "<hostname>" ... sets display hostname for X applications
echo -nowin "yes|no" ... starts JavaGUI without a DOS window
echo -plugin ... starts JavaGUI as plugin
echo -trace ... enables tracing
echo -nosec ... disables secure JavaGUI
echo -locale "<locale>" ... sets locale for JavaGUI
echo -max_limited_messages "<N>" ... sets number of messages visible in message browser
echo -refresh_interval "<INTERVAL>" ... sets refresh interval for JavaGUI in seconds
echo -apiport "<APIPORT>" ... sets port for Java Remote APIs Server
echo -apisid "<SID>" ... sets SID for Java Remote APIs Server
echo -https "true|false" ... enables secure Https communication
echo -bbc.http:proxy "<proxy>" ... configures a proxy server for secure Https communication
echo -config "<path/filename>" ... defines custom filename for JavaGUI console settings file
echo -version ... prints JavaGUI version without starting the GUI
echo -gui.dftlayout "true|false" ... configures CGI startup parameters
echo -gui.objectpane "true|false" ... configures CGI startup parameters
echo -gui.shortcutbar "true|false" ... configures CGI startup parameters
echo -gui.workspace "<name>" ... configures CGI startup parameters
echo -gui.msgbrw.type "active|history|pending" ... configures CGI startup parameters
echo -gui.msgbrw.workspace "<name>" ... configures CGI startup parameters
echo -gui.msgbrw.brwpane "true|false" ... configures CGI startup parameters
echo -gui.msgbrw.filter.name "<name>" ... configures CGI startup parameters
echo -gui.msgbrw.filter.nodes "<name_list>" ... configures CGI startup parameters
echo -gui.msgbrw.filter.services "<name_list>" ... configures CGI startup parameters
echo -gui.msgbrw.filter.apps "<name_list>" ... configures CGI startup parameters
echo -gui.msgbrw.filter.msggrp "<name_list>" ... configures CGI startup parameters
echo -gui.msgbrw.filter.object "<name_list>" ... configures CGI startup parameters
echo -gui.msgbrw.filter.msgtext "<string>" ... configures CGI startup parameters
echo -gui.msgbrw.filter.time.start "<date/time>" ... configures CGI startup parameters
echo -gui.msgbrw.filter.time.end "<date/time>" ... configures CGI startup parameters
echo -gui.msgbrw.filter.time.relative.start "<string>" ... configures CGI startup parameters
echo -gui.msgbrw.filter.time.relative.end "<string>" ... configures CGI startup parameters
echo -gui.msgbrw.filter.owned "not|me|others" ... configures CGI startup parameters
echo -gui.msgbrw.filter.severity "<severity>" ... configures CGI startup parameters
echo -gui.svcgraph.name "<service>" ... configures CGI startup parameters
echo -gui.svcgraph.calcid "0|1" ... configures CGI startup parameters
echo -gui.svcgraph.workspace "<name>" ... configures CGI startup parameters
echo -gui.svcmap.name "<service>" ... configures CGI startup parameters
echo -gui.svcmap.calcid "0|1" ... configures CGI startup parameters
echo -gui.svcmap.workspace "<name>" ... configures CGI startup parameters
echo -gui.mainmenu ... shows (true) or hides (false) main menu (default is true)
echo -gui.toolbar.svc ... shows (true) or hides (false) service toolbar (default is true)
echo -gui.toolbar.msg ... shows (true) or hides (false) message toolbar (default is true)
echo -gui.toolbar.msgbrw ... shows (true) or hides (false) message browser toolbar (default is true)
echo -gui.refresh ... sets JavaGUI refresh rate in seconds (default is 30)
echo -gui.coloredmessagelines ... shows (true) or hides (false) colored message lines (default is false)
echo -gui.show.activemessages ... sets the number of active messages shown (default is 50)
echo -gui.show.historymessages ... sets the number of history messages shown (default is 50)
echo -disableD3D ... disables Direct3D for Java (helps in case of graphic card related problems)
echo -timezone ... defines custom time zone for Java GUI
echo -maxperm ... sets maximum permanent memory for the Java Virtual Machine (default is 128m)
echo -maxheap ... sets maximum heap memory for the Java Virtual Machine (default is 512m)
echo -help, -h ... displays this page
goto EXIT
:END
set THIS=
set USER=%bk_user%
set PASSWD=%bk_passwd%
set TRACE=%bk_trace%
set JAVA=%bk_java%
set ITOSERVER=%bk_itoserver%
set DISPLAY=%bk_display%
set PLUGIN=%bk_plugin%
set APIPORT=%bk_apiport%
set APISID=%bk_apisid%
set LOCALE=%bk_locale%
set MAX_LIMITED_MESSAGES=%bk_max_limited_messages%
set REFRESH_INTERVAL=%bk_refresh_interval%
set HTTPS=%bk_https%
set PORT=%bk_port%
set SERVERSET=
set BBCPARM=
set CGIPARM=
set CONFIG=%bk_config%
set VERSION=%bk_version%
set TIMEZONE=%bk_timezone%
set MAXPERM=%bk_maxperm%
set MAXHEAP=%bk_maxheap%
set JAVAPARM=
set DLL_PATH=%bk_dll_path%
set bk_user=
set bk_passwd=
set bk_trace=
set bk_java=
set bk_itoserver=
set bk_display=
set bk_plugin=
set bk_help=
set bk_apiport=
set bk_apisid=
set bk_locale=
set bk_max_limited_messages=
set bk_refresh_interval=
set bk_https=
set bk_port=
set bk_config=
set bk_version=
set bk_timezone=
set bk_maxperm=
set bk_maxheap=
set bk_dll_path=
set PATH=%bk_path%
set bk_path=
:EXIT
Офлайн
253
Вы не привели как пытаетесь запустить эту радость в питоне и как она пускается командным файлом. И каковы симптомы того что вы не можете это запустить.
Как мы без этого узнаем что вы не так делаете
Обожаю безумные шелл скрипты MS-DOS, особенно рекурсивные.
Собственно команда
либо
%START% .\jre%NUMJREVERS%\bin\%JAVA% -Xmx%MAXHEAP% com.hp.ov.it.ui.OvEmbApplet initial_node=%ITOSERVER% user=%USER% passwd=%PASSWD% port=%PORT% trace=%TRACE% display=%DISPLAY% locale=%LOCALE% max_limited_messages=%MAX_LIMITED_MESSAGES% refresh_interval=%REFRESH_INTERVAL% apiport=%APIPORT% apisid=%APISID% https=%HTTPS% config=%CONFIG% version=%VERSION% dll_path=%DLL_PATH% timezone=%TIMEZONE% %BBCPARM% %CGIPARM%
либо
%START% .\jre7\bin\%JAVA% -XX:MaxPermSize=%MAXPERM% -Xmx%MAXHEAP% com.hp.ov.it.ui.OvEmbApplet initial_node=%ITOSERVER% user=%USER% passwd=%PASSWD% port=%PORT% trace=%TRACE% display=%DISPLAY% locale=%LOCALE% max_limited_messages=%MAX_LIMITED_MESSAGES% refresh_interval=%REFRESH_INTERVAL% apiport=%APIPORT% apisid=%APISID% https=%HTTPS% config=%CONFIG% version=%VERSION% dll_path=%DLL_PATH% timezone=%TIMEZONE% %BBCPARM% %CGIPARM%
Вставьте в это место echo либо в начале отключите @echo off
Посмотрите какая последовательность команд выполняется. Будем надеяться что прога ничего не жрет напрямую из env.
Если вы хотите получить переносимый аналог на питоне (те чтобы разные пользователи могли пользоваться), то надо переводить все это на питон. Другие варианты будут посложнее.
Офлайн
0
from pywinauto.application import Applicationfrom pywinauto.application import Applicationfrom pywinauto.application import Applicationfrom pywinauto.application import ApplicationЗапускается эта радость из командной строки со следующими параметрами name.bat -nowin -server имя_сервера -user пользователь -passwd пароль
из консоли Python
>>>subprocess.Popen('C:\\temp\\it_opt.bat -nowin -server name.local -user username -pass 000', stdout = PIPE)
<subprocess.Popen object at 0x05B8D8D0>
“c:\temp\111\it_opt.bat” Тут в юникоде ромбики с вопросами
команда subrocess.Popen('…', shell = True, stdout =PIPE)
отрабатывает аналогично предыдущей при этом консоль программы не запускается
Отредактировано angree77 (Июль 11, 2019 09:11:04)
Офлайн
253
1. Popen Требует списка аргументов насколько я помню. Т.е. надо сделать вашей строке split
2. shell =True приводит к тому что у вас
запускается cmd ему передается строка для выполнения в этой строке bat файл значит запускается еще один cmd для интерпретации, в бат файле написано start что по сути приводит к запуску третьего cmd который уже запускает java. А пайп у вас прицепится к первому cmd. В винде пайпы разных интерпретаторов не наследуются насколько я помню, поэтому скорее всего выдачу на консоль вы не получите.
Без shell =True вы можете запускать только настоящие исполняемые модули.
3. stdout =PIPE откуда вы знаете что он пишет в stdout? Это вполне может быть stderr.
Итого.
Для начала запустите
name.bat -nowin -server имя_сервера -user пользователь -passwd пароль 1>1 2>2
И посмотрите в какой поток сыпятся сообщения
Запускайте p=Popen(“.\jre%NUMJREVERS%\bin\%JAVA% -Xmx%MAXHEAP% com.hp.ov.it.ui.OvEmbApplet initial_node=%ITOSERVER% user=%USER% passwd=%PASSWD% port=%PORT% trace=%TRACE% display=%DISPLAY% locale=%LOCALE% max_limited_messages=%MAX_LIMITED_MESSAGES% refresh_interval=%REFRESH_INTERVAL% apiport=%APIPORT% apisid=%APISID% https=%HTTPS% config=%CONFIG% version=%VERSION% dll_path=%DLL_PATH% timezone=%TIMEZONE% %BBCPARM% %CGIPARM%”.split(),stdout=PIPE)
Переменные окружения надо корректно подставить.
Дальше надо аккуратно выковыривать результаты из пайпа. Учитывайте что в пайпе данные буферизируются. Не следует ожидать что они будут появляться в realtime
Офлайн
294
angree77дык какже оно запуститься если вы весь вывод перенаправляете в PIPE, уберите stdout =PIPE и оно вам будет показывать результат выполнения в консоль.
команда subrocess.Popen('…', shell = True, stdout =PIPE)
отрабатывает аналогично предыдущей при этом консоль программы не запускается
process = subprocess.Popen(["ping", "python.su"], shell=True)
[code python][/code]
Отредактировано PEHDOM (Июль 11, 2019 09:39:40)
Офлайн