- Offizieller Beitrag
Hallo
Die funktion ist warlich keine meisterleistung.. Habe sie nur gemacht weil ich sie sehr oft brauche! Und desswegen wollte ich sie euch nicht Vorenthalten:
Spoiler anzeigen
#include <Constants.au3>
FileDelete(@ScriptDir&"\test.bat")
FileWrite(@ScriptDir&"\test.bat","@echo off"&@CRLF&"echo Hallo, ich bin ein Test"&@CRLF&"whupsEinFalscherBefehl!")
$aRunRead = _RunWait("test.bat", '', @SW_HIDE, $STDOUT_CHILD + $STDERR_CHILD, 2)
If @error = 1 Then Exit MsgBox(16,"","File does not exists!")
$sMessage = "StdOut: "&@CRLF&$aRunRead[0]
$sMessage &= @CRLF
$sMessage &= "StdErr: "&@CRLF&$aRunRead[1]
$sMessage &= @CRLF
If @error = 2 Then $sMessage &= "============"&@CRLF&"Timeout reached!"
MsgBox(0, "",$sMessage)
;===============================================================================
;
; Function Name: _RunWait
; Description:: Wartet bis eine Exe beendet, genauso wie RunWait (autoit) nur mit dem unterschied das die Exe ein Std I/O Stream ausgibt, und das es ein TimeOut gibt
; Parameter(s): $sExe: Der Name der Datei (EXE, BAT, COM, PIF), die Ausgeführt werden soll.
; $sWorkindir: [optional] Das Arbeitsverzeichnis.
; $sFlag: [optional] Das Flag wie das Programm gestartet werden soll (Siehe Run in der AutoIt Hilfe)
; $iIOFlag: [optional] Das Handle zu einen oder mehreren STD Input/Output streams des child prozesses. (siehe Run in der AutoIt Hilfe)
; $iTimeOut: [optional] Zeitbegrenzung in Sekunden! Danach wird das Programm automatisch geschlossen.(mit ProcessClose)
; Requirement(s): -
; Return Value(s): Beim Erfolg: gibt ein Array zurück:
; $aReturn[0] = StdOut Read
; $aReturn[1] = StdErr Read
; Beim Error:
; @error = 1: Run hat ein Fehler ausgeben (extended: non-zero int) --> Return: 0
; @error = 2: Timeout wurde erreicht --> Return: Array, wie beim Erfolg
; Author(s): GtaSpider
;
;===============================================================================
;
Func _RunWait($sFilename, $sWorkingdir = "", $sFlag = "", $iIOFlag = "", $iTimeOut = 0)
Local $aReturn[2]
Local $pid = Run($sFilename, $sWorkingdir, $sFlag, $iIOFlag)
If @error Then Return SetError(1,@error,0)
Local $iPWC = ProcessWaitClose($pid,$iTimeOut)
$aReturn[0] = StdoutRead($pid)
$aReturn[1] = StderrRead($pid)
If Not $iPWC Then
ProcessClose($pid)
SetError(2)
EndIf
Return $aReturn
EndFunc ;==>_RunWait
Mfg Spider
Edit 20.02.2010: Mal eine neue Version veröffentlicht, jetzt mit ProcessWaitClose.
Achtung, zwei Änderungen:
Erstens: Funktion gibt jetzt ein Array zurück (siehe Beschreibung)
Zweitens: TimeOut ist nicht mehr Millisekunden, sondern Sekunden