Hallo Community
Ich versuche jetzt seit längeren die 4 Funktionen (+ 1 Parameter) auf die schliche zu kommen:
[autoit]Run() ;~ Spezifisch der 2. Parameter
StderrRead()
StdinWrite()
StdioClose()
StdoutRead()
Auf Wikipedia habe ich dies dazu gefunden:
Wikipedia - Standard-Datenströme
Dazu diverse Seiten! Allerdings auf Englisch. Leider konnte ich nichts wichtiges was ich bereits von Wikipedia weiß daraus lernen. Auch nicht mit dem Google Übersetzer. Daher stelle ich meine Fragen bezüglichst mit der Programmierung hier.
Run - 2. Parameter [gelöst] (Das stand zwar jetzt nicht in dem Wikipedia Beitrag, aber was wirklich sinnvollen habe ich nicht gefunden.)
Der Pfad, in dem das Programm ausgeführt werden soll (Arbeitsverzeichnis). Dies ist nicht der Pfad des Programms.
Frage 1: Welche Rolle spielt der Pfad? Hat das irgendwelche auswirkungen auf die ausführbarkeit der exe die ich damit starte?
Frage 2: Muss mein Arbeitsverzeichnis (@WorkingDir) angegeben werden oder ist jedes Verzeichnis möglich?
Frage 3: Was bringt die Angabe des Arbeitsverzeichnisses?
Danke an funkey für den nützlichen Link >> http://www.delphi-treff.de/tipps/dateienv…chnis-arbeiten/
Dies habe ich dazu auch noch gefunden:
ZitatGenau genommen ist das Arbeitsverzeichnis kein “automatisches” Verzeichnis und nicht wirklich festgelegt. Wie der Name schon sagt, soll in diesem Verzeichnis “gearbeitet” werden. Also Dateien gelesen und geschrieben werden. Man könnte auch sagen, dass das Arbeitsverzeichnis für jede Datei anders ist. nämlich genau das Verzeichnis in dem die Datei liegt (oder abgelegt wird).
Quelle: http://blog.nigjo.de/netbeans/2010/05/verzeichnistypen/
StderrRead und StdoutRead [gelöst]
Liest eine Anzahl von Zeichen aus einem STDERR-Stream eines zuvor gestarteten Child-Prozesses ein.
Dazu habe ich mir das Beispiel in der Hilfe angeschaut: (leicht verändert | Zeile 4)
Spoiler anzeigen
; Demonstriert StdoutRead()
#include <Constants.au3>
Local $foo = Run(@ScriptDir & '/Output.exe', @SystemDir, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
Local $line
While 1
$line = StdoutRead($foo)
If @error Then ExitLoop
MsgBox(0, "STDOUT gelesen:", $line)
WEnd
While 1
$line = StderrRead($foo)
If @error Then ExitLoop
MsgBox(0, "STDERR gelesen:", $line)
WEnd
MsgBox(0, "Debug", "Wie aufregend...")
[/autoit]Dazu der Inhalt der Output.exe:
[autoit]ConsoleWrite('Make-Grafik')
ConsoleWrite('Make-Grafik Error') ;~ Hinzugefügt
Sleep(10000) ;~ Hinzugefügt
Frage 1: Wieso liest StdoutRead nichts aus aber dafür StderrRead?
Frage 2: Wieso liest StderrRead nichts aus, wenn ich Zeile 6 bis 10 auskommentiere?
Spoiler anzeigen
; Demonstrates StdoutRead()
#include <Constants.au3>
Local $foo = Run(@ScriptDir & '/Output.exe', @SystemDir, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
Local $line
;~ While 1
;~ $line = StdoutRead($foo)
;~ If @error Then ExitLoop
;~ MsgBox(0, "STDOUT read:", $line)
;~ WEnd
While 1
$line = StderrRead($foo)
If @error Then ExitLoop
MsgBox(0, "STDERR read:", $line)
WEnd
MsgBox(0, "Debug", "Exiting...")
[/autoit]Danke an Shadowigor >> Post #6
Auch ein Danke an misterspeed für den Hinweis >> Post #7 (Die Antwort hat euch vor einer weiteren Frage bewahrt ^^)
StdinWrite [gelöst]
Hier wieder das veränderte Script (Zeile 4)
Spoiler anzeigen
; Demonstriert den Gebrauch von StdinWrite()
#include <Constants.au3>
Local $foo = Run('Output.exe', @SystemDir, @SW_HIDE, $STDIN_CHILD + $STDOUT_CHILD)
; Schreibt den zu sortierenden String in sort.exe's STDIN
StdinWrite($foo, "Ratte" & @CRLF & "Katze" & @CRLF & "Fledermaus" & @CRLF)
; Aufruf ohne zweites Argument schliesst den Stream
StdinWrite($foo)
; Lies aus dem Child's STDOUT und zeige es an
Local $data
While True
$data &= StdoutRead($foo)
If @error Then ExitLoop
Sleep(25)
WEnd
MsgBox(0, "Debug", $data)
Frage 1: Wieso kommt als Ausgabe "Make-Grafik"? Sollte dort nicht "Ratte Katze Fledermaus" erscheinen? Hier das Orginal Beispiel:
Spoiler anzeigen
; Demonstriert den Gebrauch von StdinWrite()
#include <Constants.au3>
Local $foo = Run("sort.exe", @SystemDir, @SW_HIDE, $STDIN_CHILD + $STDOUT_CHILD)
; Schreibt den zu sortierenden String in sort.exe's STDIN
StdinWrite($foo, "Ratte" & @CRLF & "Katze" & @CRLF & "Fledermaus" & @CRLF)
; Aufruf ohne zweites Argument schliesst den Stream
StdinWrite($foo)
; Lies aus dem Child's STDOUT und zeige es an
Local $data
While True
$data &= StdoutRead($foo)
If @error Then ExitLoop
Sleep(25)
WEnd
MsgBox(0, "Debug", $data)
Ich habs verstanden
+++++ | +++++ | +++++ | +++++ | +++++
Ich möchte mich hier Vorweg schonmal bedanken Ich weiß das es nicht selbstverständlich ist auf meine Fragen zu Antworten! Deswegen bin ich für jeden Tipp / Hinweis / Antwort wirklich sehr dankbar | Ich bemühe mich auch das ganze schnell zu verstehen
Mfg. Make-Grafik