AutoIt3ExecuteLine > Ausgabe Umleiten in Datei - Datei wird nicht erstellt -- bei Aufruf aus Lua

    • Offizieller Beitrag

    In der CMD kann ich folgenden Befehl ausführen:

    "C:\Program Files (x86)\AutoIt3\autoit3.exe" /ErrorStdOut /AutoIt3ExecuteLine "ConsoleWrite(""Hallo AutoIt"" & @CRLF)" > "C:\Users\BugFix\AppData\Local\Temp\execute_line_au3.txt"

    und erhalte das Ergebnis, wie erwartet, in der angegebenen Datei.

    Versuche ich das jedoch aus der Anwendung heraus, wird die Datei nicht erstellt:

    AutoIt
    $sCmd = '"C:\Program Files (x86)\AutoIt3\autoit3.exe" /ErrorStdOut /AutoIt3ExecuteLine "ConsoleWrite(""Hallo AutoIt"" & @CRLF)" > "C:\Users\BugFix\AppData\Local\Temp\execute_line_au3.txt"'
    Run($sCmd)
    ;~ Run($sCmd, @TempDir, @SW_HIDE, 0x2)  ; ebenso ohne Erfolg
    
    $TmpFile = @TempDir & '\execute_line_au3.txt'
    If FileExists($TmpFile) Then
        ConsoleWrite(FileRead($TmpFile) & @CRLF)
    Else
        ConsoleWrite('No File' & @CRLF)
    EndIf

    Wie bekomme ich das zum Laufen? (Datei erstellen und dorthinein Schreiben ist keine Option. Das Ergebnis des Aufrufs ist eine Konsolenausgabe und diese soll direkt in eine Datei umgeleitet werden.)

  • In der CMD kann ich folgenden Befehl ausführen:

    Hiermit hast du dir quasi schon selbst die Antwort gegeben... wegen der Ausgabeumleitung mit ">".

  • BugFix 28. Februar 2021 um 12:40

    Hat das Label [ gelöst ] hinzugefügt.
  • BugFix 28. Februar 2021 um 17:53

    Hat das Label von [ gelöst ] auf [ offen ] geändert.
  • BugFix 28. Februar 2021 um 17:54

    Hat den Titel des Themas von „AutoIt3ExecuteLine > Ausgabe Umleiten in Datei - Datei wird nicht erstellt“ zu „AutoIt3ExecuteLine > Ausgabe Umleiten in Datei - Datei wird nicht erstellt -- bei Aufruf aus Lua“ geändert.
    • Offizieller Beitrag

    Ich habs nochmal aufgemacht, da ich jetzt getestet habe, wie das wohl wäre von Lua aus (also aus SciTE) damit zu arbeiten.

    Es ist eigentlich einfacher, da os.execute immer in der CMD arbeitet.

    Für einfache Windowsbefehle funktioniert das tadellos:

    Code
    local tree = "tree \"C:/code/lua\" /A > \"C:/code/lua/tree.txt\""
    os.execute(tree)

    Aber AutoIt3ExecuteLine geht in die Hose:

    Code
    local hallo = "\"C:/Program Files (x86)/AutoIt3/autoit3.exe\" /ErrorStdOut /AutoIt3ExecuteLine \"ConsoleWrite('Hallo AutoIt' & @CRLF)\" > \"C:/code/lua/hallo.txt\""
    os.execute(hallo)

    :?::?:

  • Aber AutoIt3ExecuteLine geht in die Hose:

    Code
    --~ local hallo = "\"C:/Program Files (x86)/AutoIt3/autoit3.exe\" /ErrorStdOut /AutoIt3ExecuteLine \"ConsoleWrite('Hallo AutoIt' & @CRLF)\" > \"C:/code/lua/hallo.txt\""
    -- -->> "C:/Program Files (x86)/AutoIt3/autoit3.exe" /ErrorStdOut /AutoIt3ExecuteLine "ConsoleWrite('Hallo AutoIt' & @CRLF)" > "C:/code/lua/hallo.txt"
    
    local hallo = "\"\"C:/Program Files (x86)/AutoIt3/autoit3.exe\" /ErrorStdOut /AutoIt3ExecuteLine \"ConsoleWrite('Hallo AutoIt' & @CRLF)\" > \"C:/code/lua/hallo.txt\"\""
    -- -->> ""C:/Program Files (x86)/AutoIt3/autoit3.exe" /ErrorStdOut /AutoIt3ExecuteLine "ConsoleWrite('Hallo AutoIt' & @CRLF)" > "C:/code/lua/hallo.txt""
    
    print(hallo)
    print(os.execute(hallo))
  • Bitnugger Du bist nicht nur gut, sondern auch schnell! Da dachte ich, das seh' ich mir mal an und bastel was zusammen, und in der Zwischenzeit hast präsentierst du schon eine Lösung, die noch dazu eleganter ist als das, was ich geplant hatte. Respekt! :rock:

    Wenn jemand sagt: "Das geht nicht!" Denke daran: Das sind seine Grenzen, nicht deine.

  • Eleganz liegt im Auge des Betrachters... ist also relativ. ;)

  • BugFix 5. März 2021 um 21:29

    Hat das Label von [ offen ] auf [ gelöst ] geändert.
    • Offizieller Beitrag

    Dann kann man auch mal in Lua-Skripten auf AutoIt-Makros (sofern sie nicht am Skript orientiert sind) zugreifen: