Page 1 sur 1

[R] ConsoleWrite

Posté : lun. 27 juin 2011 18:21
par mikell
Une bête question sur ConsoleWrite ...
Fichier d'aide a écrit :The purpose for this function is to write to the STDOUT stream. Many popular text editors can read this stream
OK mais en pratique, comment ensuite lire ça avec Notepad (par exemple) ?
Un exemple simple please ?

Re: [..] ConsoleWrite

Posté : lun. 27 juin 2011 18:35
par jchd
Peu de programmes Windows emploient stdout, mais c'est tout à fait possible d'intercepter la sortie et d'en faire un fichier, une cocotte en papier, etc.
Pour autant que je sache, Notepad ignore l'entrée standard, donc pas de pipe possible.
Que veux-tu faire précisément ?

Re: [..] ConsoleWrite

Posté : lun. 27 juin 2011 18:48
par mikell
Ben en fait, je vois des ConsoleWrite partout, le dernier en date ici http://www.autoitscript.fr/forum/viewto ... 537#p50537
Et comme je ne sais pas en pratique à quoi ça peut servir ça m'agace et j'aimerais comprendre...

Re: [..] ConsoleWrite

Posté : lun. 27 juin 2011 18:53
par jchd
Scite affiche ces consolewrite dans le panneau du bas, ce qui est des plus pratique. D'autre éditeurs en sont capables.

Re: [..] ConsoleWrite

Posté : lun. 27 juin 2011 18:58
par mikell
Dans cette réponse que tu viens de donner :
jchd a écrit :

Code : Tout sélectionner

#include <Date.au3>

Local $date = '2011/04/23'
For $i = -11 To 0
    ConsoleWrite(StringRegExpReplace(_DateAdd("M", $i, $date), "(\d\d\d\d)/(\d\d)/\d\d", "$1$2") & @LF)
Next
A quoi sert le ConsoleWrite ? Comment exploiter le résultat dans un script, le faire afficher quelque part par exemple ?

Re: [..] ConsoleWrite

Posté : lun. 27 juin 2011 19:08
par jchd
Tu colles dans Scite sous un nom bidon.au3 et F5.

Re: [..] ConsoleWrite

Posté : lun. 27 juin 2011 19:37
par mikell
Je ne vois toujours pas l'intérêt pratique de la chose....
Pourquoi ne pas sortir le résultat dans une variable facile à utiliser dans un script, plutôt qu'un ConsoleWrite d'utilisation pas évidente ?
ça s'affiche dans Scite, super mais pour l'afficher dans une GUI avec une Label par exemple ? comment on fait ?

Re: [..] ConsoleWrite

Posté : lun. 27 juin 2011 20:10
par jchd
Pour faire une moulinette rapide qui n'a pas vocation à perdurer, mettre au point un script vaseux sur lequel coince quelqu'un, etc.
L'avantage est qu'on est maître de la police employé pour Scite, donc on peut afficher du tibétain en cinq secondes, alors qu'avec une msgbox, niet sauf à sortir l'artillerie.
On peut faire récupérer cette sortie par un programme annexe.
On peut copier la sortie et se la scotcher ailleurs.
On n'est essentiellement pas limité en volume ni en longueur de ligne(s). J'ai quelques scripts qui me sortent 320Mo ou plus. Je vois mal zipper ça dans une msgbox et me le traiter ailleurs.
Je déteste la fonte des msgbox. Je travaille surtout en fonte fixe (DejaVu sans Mono, beaucoup).
...

Ah, j'allais oublier : c'est vital pour beaucoup de programmes CUI !!!

Re: [..] ConsoleWrite

Posté : lun. 27 juin 2011 20:53
par matwachich
Sa se voit que le gars qui pose cette question n'a pas l'habitude d'écrire des gros script!!! (sans vouloir vous offensé!)
Le PLUS grande utilité de ConsoleWrite dans Scite est le déboguage.

Quand un script coince, c'est bon de savoir ou et pourqoi sa coince!

Re: [..] ConsoleWrite

Posté : lun. 27 juin 2011 21:49
par mikell
matwachich a écrit :Sa se voit que le gars qui pose cette question n'a pas l'habitude d'écrire des gros script!!! (sans vouloir vous offensé!)
C'est vrai, je n'ai pas l'habitude d'écrire de gros scripts
C'est juste que je ne suis pas programmeur, comme sans doute pas mal de gens qui viennent sur ce forum pour demander de l'aide alors qu'ils débutent avec AutoIt, et à qui on donne du ConsoleWrite comme réponse, et qui comme moi doivent se demander ce qu'ils vont bien pouvoir en faire...
Certaines choses qui paraissent évidentes à ceux qui ont beaucoup d'heures de vol en programmation ne sont pas forcément évidentes pour nous autres les ignorants
Dans le premier post je demandais juste un exemple simple d'application pratique de ConsoleWrite dans un script basique, mais bon...
Donc je vais (tout en vous remerciant pour vos réponses) continuer à ne pas utiliser cet indispensable machin dans mes petits scripts pauvres, non scientifiques et pas écrits en tibétain

Re: [..] ConsoleWrite

Posté : lun. 27 juin 2011 22:37
par jchd
Exemples simples dans des scripts basiques ? Ben je crois en donner souvent ici ou là.
Une trace console ne perturbe pas non plus un GUI en changeant le focus, le contrôle et la fenêtre actifs, ne provoque pas un redraw à la fermeture, enfin tout ça.
Pour tracer des messages Windows, il n'y a guère mieux et plus simple, sauf de l'artillerie incompatible, type VS.

Re: [..] ConsoleWrite

Posté : lun. 27 juin 2011 23:00
par matwachich
J'ai bien préciser sans "vouloir vous offenser"
Moi aussi au début je n'ai jamais utiliser ConsoleWrite.

Exemple:
► Afficher le texte
Tu lance ce script, puis tu ouvre ton navigateur et tu vas à l'adresse 127.0.0.1
Tu veras les messages qu'envoi ton navigateur à ce script s'écrire en bas, dans Scite

Re: [..] ConsoleWrite

Posté : lun. 27 juin 2011 23:21
par mikell
Merci matwachich pour ce script, je ne suis pas offensé, juste agacé
Je me suis mal fait comprendre sans doute alors je recommence

Est-ce qu'un résultat donné sous forme de ConsoleWrite() dans un script peut être affiché dans une GUI créée par ce même script, et si oui comment ? sachant que
1) A chaque fois on me dit "ça s'affiche dans Scite...", or je me FOUS de l'affichage dans Scite
2) Les termes tous plus techniques les uns que les autres qu'on me donne en réponse jusqu'à présent ne m'aident pas, bien au contraire
Quand même, c'est simple comme question, non ?

Re: [..] ConsoleWrite

Posté : mar. 28 juin 2011 00:09
par jchd
Pas la peine de s'agacer.
ConsoleWrite écrit dans le flux standard de sortie, stdout, point barre. Si tu veux mettre ces données dans un morceau de GUI, c'est bien sûr à toi de le faire.

Tout programme Dos, Windows, Unix, Mac (c'est pareil) ouvre, par défaut, trois "flux" (stdin, stdout, stderr) qui sont des "handle" de fichiers qu'on peut rediriger vers n'importe quel autre consommateur de flux. C'est un peu comme si le code du démarrage du programme ouvrait pour toi trois fichiers (au sens large) qui peuvent venir d'une source quelconque (stdin pour input) ou aller vers un consommateur quelconque.

Tout ça n'a aucun lien avec un GUI, bien au contraire. Ce que tu produis avec des ConsoleWrite parvient dans le flux stdout. Le parent (shell ou autre programme) peut l'avoir dirigé vers n'importe quoi.

Re: [..] ConsoleWrite

Posté : mar. 28 juin 2011 02:02
par matwachich
Je crois que je dois simplifier ce que dit jchd!!!
Vois ces flux comme des portes, et le programme comme la maison:
- 2 portes servent à sortir de la maison
- 1 à rentrer
Mais sortir/rentrer quoi?
et bien du texte (pour faire simple)

Prenons un programme tout ce qu'il y à de plus basique (c'est à dire, en mode console, ou ms dos si tu préfère, tu sais, le truc noir tout moche... mdr :p) cmd.exe (fait démarrer -> exécuter -> tape cmd -> Entrer)
- Une fenêtre noire, et elle t'afficher des trucs, c'est une des portes de sortie! (le stdout)
- Tu peux entrer des trucs (instructions...), c'est la porte d'entrée (stdin)
- l'autre porte de sortie, je crois que cmd n'en a pas.

Après, ici les portes sont redirigées vers l'écran (affichage), rien n'empèche de les envoyer vers un fichier! et là tu auras 2 fichiers (stdout, déjà vu, et stderr, l'autre porte de sortie!)

C'est au fait des moyens basiques de communication entre le programme et le monde extérieur.

Maintenant, dans autoit, pourquoi ConsoleWrite est si utile???
Car Scite (et beaucoup d'autre éditeurs) "capture" le flux stdout de ton script et l'affiche en bas.
Donc, par exemple, si par souci de débogage (ou juste par curiosité) je veut savoir à un moment précis le contenu d'une variable dans mon script, bah je n'ai qu'à mettre à ce moment:

Code : Tout sélectionner

ConsoleWrite($maVariable & @CRLF)
et hop! le contenu s'affiche en bas dans Scite!

Elle est pas belle la vie avec AutoIt!

Quand à ta GUI, bah ya rien à ajouter à ce que disait jchd: ça n'a rien à voir!
Tu peut "simuler" une console dans ta GUI (ce que je fais souvent), pour par exemple tracer tes variables même si le script est compilé, ou juste afficher des trucs!
► Afficher le texte
PS: si on suit le truc des portes, disons qu'une GUI est une immense baie vitrée interactive!

Re: [..] ConsoleWrite

Posté : mar. 28 juin 2011 09:16
par mikell
Oufff ça y est j'ai enfin ma réponse, Image qui tient en peu de mots :
matwachich a écrit :Quand à ta GUI, bah ya rien à ajouter à ce que disait jchd: ça n'a rien à voir!
Parce que tout de même j'avais lu le fichier d'aide bien comme il faut et compris que ConsoleWrite servait à communiquer avec l'extérieur du script
Ce que je ne comprenais pas, c'était ça : quand une réponse est fournie sur le forum, comme par exemple :
jchd a écrit :

Code : Tout sélectionner

Local $date = StringFormat("%04i%02i", @YEAR, @MON)
ConsoleWrite($date & @LF)
ConsoleWrite(StringFormat("%04i%02i", 17, 3) & @LF)
ce qui intéresse celui qui a posé la question, a priori c'est de pouvoir utiliser la réponse dans le script qu'il est en train de construire
Donc il a besoin d'un résultat sous forme de variable exploitable dans le script, pas d'un ConsoleWrite qu'il pourra exploiter partout SAUF dans son script Image

Donc merci à jchd pour avoir fait l'effort d'utiliser des mots compréhensibles, et à matwachich pour son analogie qui me confirme que je n'avais pas compris le fichier d'aide de travers

Re: [R] ConsoleWrite

Posté : mar. 28 juin 2011 09:29
par jchd
Tu nous fais un blocage nerveux là.
Si ce qu'un exemple sortant en ConSoleWrite t'intéresse, le plus simple est de stocker l'expression dans une variable, dont tu feras ce que tu veux. La situation est rigoureusement identique avec une MsgBox.
Par ailleurs, une simple recherche Google sur stdout par exemple t'aurait appris plus directement de quoi il s'agissait.

Re: [R] ConsoleWrite

Posté : mar. 28 juin 2011 11:21
par Manwe

Code : Tout sélectionner

#Include <File.au3>


Func print($text, $log = '', $noCRLF ='')
    
    if $noCRLF = '' then $text &= @CRLF
    ConsoleWrite('# '& $text)
    
    If $log <> '' Then
        If Not FileExists(@ScriptDir & "/logs") Then DirCreate(@ScriptDir & "/logs")

        _FileWriteLog(@ScriptDir & "/logs/log_" & @ScriptName & ".htm", "<font face=Verdana size=2>" & $text & "</font><br>", 1)
                
        Global $editControl
        $windowName = "Script is running. Please wait ... "
        if not WinExists ( $windowName ) Then 
            GUICreate($windowName, 250, 300, 10, 10)  
            $editControl = GuiCtrlCreateEdit(@CRLF & " ", 0, 0, 250, 300 )
            GuiSetState()
        endif 
        GUICtrlSetData($editControl, $text, 1)
        
    EndIf
EndFunc 

print ("Je fais juste un consoleWrite")
print ("Je logue et j'affiche", "log")
MsgBox(0,'','Fin du script')
 

Re: [R] ConsoleWrite

Posté : mar. 28 juin 2011 20:07
par matwachich
Quand on utilise consoleWrite, c'est pour afficher le contenu d'une variable sans se casser la tête avec une GUI.
Après le mec, il se débrouille! Mais c'est juste pour montrer que la variable contient bien ce qu'on cherche.