Что нового

Запуск консольного приложения и вывод данных в гуи (майнинг)

WR-e-D

Новичок
Сообщения
53
Репутация
3
Код:
Global $wintitle = "[CLASS:ConsoleWindowClass]", $fInterrupt = 0

if WinExists($wintitle) then
        MsgBox(0, "Ошибка", "Майнер уже запущен - выход", 2)
		exit
	 endif
;---------
FileChangeDir(@HomeDrive & "\cgminer")
$miner = Run('cgminer.exe --scrypt -o --worksize 512,256,512,512 -v 1,1,1,1 -I 20,13,20,20 еще много параметров 2>log.txt', '', @SW_HIDE, $STDIN_CHILD + $STDERR_MERGED)
WinWait($wintitle, "", 2)
;---------


Не работал с командной строкой в автоайти,
Подскажите как передать параметры исполняемому екзе и получить с него данные - при запуске методом StdInWrite выводят данные о запуске но не данные вывода екзешника.
 

ildar

Осваивающий
Сообщения
252
Репутация
29
Если нужно считать вывод
Код:
$iPID = Run(@ComSpec & ' /C cgminer.exe --scrypt -o --worksize 512,256,512,512 -v 1,1,1,1 -I 20,13,20,20 еще много параметров 2' , '', @SW_HIDE, $STDIN_CHILD + $STDOUT_CHILD)

    If Not $iPID Then
        MsgBox(16, 'Error', 'Error')
        Exit
    EndIf
    $sRead = ''
    While 1
        $sRead &= StdoutRead($iPID)
        
        If @error Then ExitLoop

        Sleep(10)

        ConsoleWrite($sRead)
       
    WEnd

Добавил $sRead = '', хотя и без этого работало.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
ildar,
Вы забыли в начале объявить $sRead, добавьте в начало кода
Код:
$sRead = ''
;~ Or
Local $sRead
 
Автор
WR-e-D

WR-e-D

Новичок
Сообщения
53
Репутация
3
Код:
Func _ReadCMData ($target)
If $fInterrupt <> 0 Then Return
   $data = StdoutRead($target)
 if $data<>"" Then
	_Added($Edith, _Encoding_OEM2ANSI($data), 50)
 EndIf
EndFunc

Дело в том, что я естественно сначала проверил правильный вариант который вы предложили - спасибо, но экзешник ответил что задан неверный параметр - перепроверив параметр в самой консоли - запустилось нормально, поэтому и начал фантазировать и в конце концов обратился за вашей помощью ) Хотя чуть позже нужно будет перепроверить делал на сонную голову - возможно в чем-то другом ошибка.
Спасибо.

P.S. Высплюсь и отпишу :smile:

Добавлено:
Запуск происходит с параметрами, но вывода данных нет.
 

ildar

Осваивающий
Сообщения
252
Репутация
29
WR-e-D
А в твоем варианте log.txt тоже пустой?
 
Автор
WR-e-D

WR-e-D

Новичок
Сообщения
53
Репутация
3
нет в Log.txt идет запись. Тема не решена но я просто считываю информацию из лог файла.
 
Автор
WR-e-D

WR-e-D

Новичок
Сообщения
53
Репутация
3
Была похожая проблема, может тоже твой случай? [Сеть, интернет] Сканирование локальной сети
Кстати да - Win7 64x.
Есть догадки как исполнить команду ?
Код:
setx GPU_MAX_ALLOC_PERCENT 100
setx GPU_USE_SYNC_OBJECTS 1
cgminer.exe --scrypt -o stratum+tcp://урл:3333 -u ferma-9 -p пасс --worksize 512 -v 1 -I 20 -g 1 --thread-concurrency 32765,24550,24550 другие параметры --gpu-memclock 1250,1400,1390 2>log.txt
в консоли с выводом данных в ГУИ - а точнее нужно выдерать данные из консоли:



Добавлено:
Сообщение автоматически объединено:

OffTopic:
Wrong value type sent to the database. Array of integers expected. (attachment_list)
Это вылезло когда пытался удалить атачмент.


 
Автор
WR-e-D

WR-e-D

Новичок
Сообщения
53
Репутация
3
Вся проблема была в 2>log.txt - убираем вывод в лог файл - все нормально работает. спасибо madmasles
 

ildar

Осваивающий
Сообщения
252
Репутация
29
В моем варианте вывода в log нет.
 
Автор
WR-e-D

WR-e-D

Новичок
Сообщения
53
Репутация
3
Дело не в варианте, а в специфике cgminer-а:
Рабочий отрывок. Сори udf разбирать не стал.
Код:
;#Include <Update_Ex.au3>
#include <Date.au3>
;#include <IE_new.au3>
#Include <WinAPIEx.au3>
#include <WindowsConstants.au3>
#include <StaticConstants.au3>
#include <String.au3>
#Include <WinAPI.au3>
#include <array.au3>
#include <Misc.au3>
#include <ButtonConstants.au3>
#include <WindowsConstants.au3>
#include <GuiToolbar.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <GUIConstants.au3>
#Include <GUIEdit.au3>
#Include <GUISlider.au3>
#Include <File.au3>
#include <Constants.au3>
#include <ComboConstants.au3>
#include <TabConstants.au3>
#include <MenuConstants.au3>
#include <Encoding.au3>
#include <Process.au3>
#RequireAdmin
FileChangeDir(@HomeDrive & "\cgminer")
;Авто Обновление
$Current_Version = "1.1.6"
;_StartCheckForUpdate("url",$Current_Version,True)
;~ Конец автообновления
Global $wintitle = "[CLASS:ConsoleWindowClass]", $fInterrupt = 0, $Log, $CountWile = 0

;################################ ГУИ #############################
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("MineController - " & $Current_Version, 653, 392, Default, Default)
GUISetBkColor(0x808080)
$Label2 = GUICtrlCreateLabel("Информация", 9, 8, 75, 19)
GUICtrlSetColor(-1, 0xFFFFFF)
$InfoD = GUICtrlCreateEdit("", 8, 26, 633, 70, BitOR($ES_READONLY,$ES_WANTRETURN,$WS_BORDER), 0)
$Label1 = GUICtrlCreateLabel("Основные Действия", 9, 105, 112, 19)
GUICtrlSetColor(-1, 0xFFFFFF)
$Edit1 = GUICtrlCreateEdit("", 8, 122, 633, 70, $ES_READONLY)
GUICtrlSetData(-1, "Программа запущена")
$Group1 = GUICtrlCreateGroup(" Лог ", 8, 200, 633, 185, BitOR($ES_READONLY,$GUI_SS_DEFAULT_GROUP,$WS_CLIPSIBLINGS))
GUICtrlSetColor(-1, 0xFFFFFF)
$Edith = GUICtrlCreateEdit("", 16, 217, 617, 158, BitOR($ES_READONLY,$ES_AUTOVSCROLL,$WS_VSCROLL,$ES_NOHIDESEL,$ES_WANTRETURN))
GUICtrlCreateGroup("", -99, -99, 1, 1)
GUIRegisterMsg($WM_SYSCOMMAND, 'WM_SYSCOMMAND')
GUIRegisterMsg($WM_COMMAND, '_WM_COMMAND')
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
;_конец ГУИ



$MinerStart = Run(@ComSpec & ' /C cgminer.exe --scrypt -o stratum+tcp://...........ngine 980 --gpu-memclock 1250', @WorkingDir, @SW_HIDE, $STDERR_MERGED)

While 1
_ReadCMData ($MinerStart)
    $nMsg = GUIGetMsg()
    Switch $nMsg
 Case $GUI_EVENT_CLOSE
            Exit
		   EndSwitch
Sleep(100)
WEnd

;###################################### Функции ######################################

 ;*=============================================== Считывание данных
Func _ReadCMData ($target)
If $fInterrupt <> 0 Then Return
Local $data = ''
   $data &= StdoutRead($target)
          If @error Then Return
        Sleep(10)
 if $data <> "" Then
    _Added($Edith, _Encoding_OEM2ANSI($data), 150)

 EndIf
EndFunc


 ;*=============================================== Запись действий
Func _Added($iEdit, $sNewString, $iK)
    GUICtrlSetData($Edith, $sNewString & @CRLF & StringRegExpReplace(GUICtrlRead($Edith), '(?s)((?:.*?\r\n){'&$iK&'})(.*)', '\1'))
EndFunc

  ;*=============================================== SLEEP
  Func _SleepEx($iDelay) ;~ Sleep модификация
	   If $fInterrupt <> 0 Then Return True
 	Local $iBegin = TimerInit()
 	Do
 		Sleep(50)
 		If $fInterrupt Then
 			Return True
 		EndIf
 	Until TimerDiff($iBegin) > $iDelay
 	Return False
 EndFunc

 ;*=============================================== Выход
Func WM_SYSCOMMAND($hWnd, $Msg, $wParam, $lParam)
    Local $nID = BitAND($wParam, 0xFFFF)
    If $nID == $SC_CLOSE Then
	    If ProcessExists("cgminer.exe") Then ProcessClose("cgminer.exe")
ProcessWaitClose ("cgminer.exe")
		   	   WinClose($wintitle)
Exit
EndIf
Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_SYSCOMMAND

Func _WM_COMMAND($hWnd, $Msg, $wParam, $lParam)
    Local $nNotifyCode = BitShift($wParam, 16)
    Local $nID = BitAND($wParam, 0xFFFF)
Switch $hWnd
   Case $wintitle
    Switch $nNotifyCode
        Case $BN_CLICKED
            Switch $nID
                Case $SendButton
$fInterrupt = 1
			   EndSwitch
    EndSwitch
EndSwitch
    Return $GUI_RUNDEFMSG
 EndFunc   ;==>WM_COMMAND
 
Сообщения
80
Репутация
-1
Хороший кусок кода, хотя мне и непонятный.
Как я понял сначала запускается команда $MinerStart = Run и считывается её значение. Потом это значение отправляется в гуй.
Попробовал выполнить это по нажатию клавиши и получил пустую строку, команда не сработала.
В любом случае этот метод не подходит. Или может я лишнего вырезал, но мне кажется последние 2 функции для других целей.

Нужно эмулировать именно консоль венды или встроить её в гуй. Нужно получать данные из программы в реальном времени, а не после после её выполнения. Процесс может быть до 40 минут
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
winix

Предупреждение За нарушение общих правил (пункт В.8):
Так как эта конференция называется "Русское сообщество AutoIt", язык общения на ней - Русский. Названия фирм или программных продуктов, аббревиатуры и т.д. должны быть написаны так, как они пишутся в оригинале, например не следует писать УСБ вместо USB. На форуме крайне не рекомендуется намеренно искажать русский язык и использовать "сетевой жаргон" на подобии "Аффтар выпей йадау!".


С уважением, ваш Модератор.
 
Верх