Page 1 sur 1
[R] STD OUT & STD ERR
Posté : jeu. 22 déc. 2011 16:04
par DimVar
Bonjour,
Je viens de decouvrir que le langage (en general) permet de faire "sortir" une sortie standard et erreur.
Je me demande donc comment je peux faire apparaitre la STD out dans une console DOS.
Quelle est la fonction necessaire ?
J'ai essayé le code ci-dessous mais cela ne s'affiche que dans la console de Scite, et pas dans un cmd, si je lance l'exe à partir d'un CMD.
Suis-je clair ? (car je decouvre ce "procédé")
Merci.
Re: [..] STD OUT & STD ERR
Posté : jeu. 22 déc. 2011 16:25
par TommyDDR
Pour que cela s'affiche dans la console, il faut compiler votre code en CUI et non en GUI (clic groid / complie with options / Cochez : Use CUI instead of GUI")
Re: [..] STD OUT & STD ERR
Posté : jeu. 22 déc. 2011 16:36
par DimVar
CA MARCHE !!!
Difference entre les 2 ? (cui gui)
[EDIT] Je viens de voir la definition dans l'aide de la commande ConsoleWriteError => CUI = Console User Interface ; GUI = Graphic User Interface
1000 Merci Tommy !!!
J'ai l'impression d'avoir fait un grand pas avec ce nouveau concept !
Ca résoud en plus un vieux pb que j'avais avec mes scripts compilés en GUI qui ne fonctionnait jamais quand je les installait en Service Windows.
Re: [..] STD OUT & STD ERR
Posté : jeu. 22 déc. 2011 16:39
par TommyDDR
Pour info : CUI permet quand même vos GUICreate mais par contre vous aurez toujours une console qui s'ouvrira au lancement du script.
Re: [..] STD OUT & STD ERR
Posté : jeu. 22 déc. 2011 23:41
par DimVar
Mince. J'arrive bien à afficher la sortie en console avec la compilation CUI.
Par contre, dans le script ci-dessous, j'archive des logs...
► Afficher le texte
Code : Tout sélectionner
#include <Date.au3>
Global $file, $file1, $dateFichier, $date, $ok, $date1
Global $param1, $param2
Global $ini = IniReadSection (".\Archivage.ini","PARAM")
Global $pathLog = $ini[1][1], $path = ""
Global $vieillissement = $ini[2][1]
Global $pathArchive = $ini[3][1]
Global $fichierAzipper = "",$aLoguer
; Shows the filenames of all files in the current directory.
$search = FileFindFirstFile($pathLog & "*.log")
; Check if the search was successful
If $search = -1 Then
Exit -1
EndIf
While 1
$file = FileFindNextFile($search)
If @error Then ExitLoop
$date = _recupereDate ($pathLog & $file)
$ok = _CompareDate ($date)
If $ok > $vieillissement Then
_moveFile ($pathLog & $file,$pathArchive & $file)
$fichierAzipper = $pathArchive & $file & " " & $fichierAzipper & " "
EndIf
WEnd
; Close the search handle
FileClose($search)
;~ _7z ($fichierAzipper)
;~ FileDelete ($pathArchive & "*.log")
Exit 0
Func _recupereDate ($file1)
Local $time, $jour
$time = FileGetTime ($file1)
$jour = $time[0]&"/"&$time[1]&"/"&$time[2]&" "&$time[3]&":"&$time[4]&":"&$time[5]
Return $jour
EndFunc
Func _CompareDate ($date1)
Local $diff
$diff = _DateDiff ("D", $date1,_NowCalc())
Return $diff
EndFunc
func _moveFile ($param1,$param2)
FileMove ($param1,$param2,9)
EndFunc
Func _7z ($fichierAzipper)
RunWait(@ComSpec & " /c " & "7z.exe a " &$pathArchive& @YEAR & @MON & @MDAY & @HOUR & @MIN & ".zip " & $fichierAzipper & " > 7zlog.log")
;~ ConsoleWrite ($path & "7z.exe a " &$pathArchive& @YEAR & @MON & @MDAY & @HOUR & @MIN & ".zip " & $fichierAzipper)
EndFunc
Func _Log ($aLoguer)
Local $fileopen = FileOpen (@ScriptDir & "\Archivage.log",1)
FileWrite($fileopen, $aLoguer)
FileClose ($fileopen)
EndFunc
... et quand je lance cet exe (compilé en CUI) à la souris, pas de soucis, il fait le boulot et se ferme.
Quand je le lance par notre scheduller (JobScheduller), le programme se lance (je le voit dans les process de Windows) mais il ne fait rien...
Archi : Windows Serveur 2008
[EDIT] J'ai trouvé
ca mais malgré les pistes, le programme reste comme figé.
Re: [..] STD OUT & STD ERR
Posté : ven. 23 déc. 2011 01:17
par Tlem
Problème de droits sans doute, car en mode service, les droits ne sont pas les mêmes.

Probablement sur le
RunWait().
Re: [..] STD OUT & STD ERR
Posté : ven. 23 déc. 2011 14:07
par DimVar
J'ai verifié les droits, pas de pb, l'ordonnaceur a les droits (et lance les exe) admin local et est de plus admin du domaine.
Du coup, comme ce script ne se lance pas, j'ai essayé un script d'une ligne avec juste un msgbox (script 1) et un autre avec juste un consolewrite compilé en CUI (script2).
Le script 2 se lance sans soucis, mais le script 1 me fait apparaitre cette popup (server 2008).
Je seche complet...
Re: [..] STD OUT & STD ERR
Posté : ven. 23 déc. 2011 22:21
par Tlem
Humm, je dirais normal dans ce cas, puisque la session n'est pas forcément active et donc l'interface graphique non plus !!!
L'affichage d'une GUI ou boite de dialogue ne peut se faire que si la session est active ou ouverte.
Ceci dit, j'avais déjà jeté un œil sur le code, mais pas vu un appel graphique quelconque. Donc il faut sans doute débugger ligne par ligne et voir là ou ça bloque.
Faites un fichier de log et ajoutez une inscription pour chaque action. Vous trouverez forcément la ligne fautive.
Re: [..] STD OUT & STD ERR
Posté : lun. 26 déc. 2011 09:42
par DimVar
Vous pensez par debug : Filewrite (dans un log) apres chaque appel de fonction ?
Ceci dans le but de connaitre à quel N° de ligne du code, le système bloque l’exécution ?
Merci.
[EDIT] en attendant votre retour, j'ai procédé à ca :
► Afficher le texte
Code : Tout sélectionner
Global $file, $file1, $dateFichier, $date, $ok, $date1
Global $param1, $param2
Global $ini = IniReadSection (".\Archivage.ini","PARAM")
_Log ("$ini")
Global $pathLog = $ini[1][1], $path = ""
_Log ($pathLog)
Global $vieillissement = $ini[2][1]
_Log ($vieillissement)
Global $pathArchive = $ini[3][1]
_Log ($pathArchive)
Global $fichierAzipper = "",$aLoguer
_Log ("fin variables")
Func _Log ($aLoguer)
Local $fileopen = FileOpen (@ScriptDir & "\Archivage.log",1)
FileWrite($fileopen, $aLoguer)
FileClose ($fileopen)
EndFunc
Le log s'arrete à "$ini"
Autrement dit, dés qu'il tente de renseigner $Pathlog avec l'array $ini, ca coince !
Là je seche...
[EDIT2] La section de l'aide me dit que je dois declarer un tableau avecx DIM. Est ce que ca pose un pb si je declare un tableau avec "global" ou "local" ? J'ai essayé avec DIM mais ca ne change rien.
Re: [..] STD OUT & STD ERR
Posté : lun. 26 déc. 2011 10:18
par Tlem
Je ne sais pas si c'est ca, mais, au lieu d'utiliser un chemin relatif, essayez plutôt de le spécifier.
deviendrait
Code : Tout sélectionner
Global $ini = IniReadSection (@ScriptDir & "\Archivage.ini","PARAM")
Re: [..] STD OUT & STD ERR
Posté : lun. 26 déc. 2011 10:40
par DimVar

Ca marche.
Pouvez vous me dire pourquoi cela fonctionne avec des chemins absolus ?
Dois je tjs proceder ainsi ? Pkoi ne peut on utiliser cette syntaxe ".\chemin" ? (puisque elle fonctionne en local)
Grand merci. (5 jours que je suis dessus

)
Re: [..] STD OUT & STD ERR
Posté : lun. 26 déc. 2011 17:49
par TommyDDR
Quand vous lancez votre code par Scheduler, c'est par la session system que le programme est lancé et donc toutes les interactions sont faites avec l'environnement de celui-ci (j'ai eu le même problème pour un script lancé en tant que service).
À ma connaissance, vous ne pourrez pas interagir avec l'utilisateur.
PS : Sous XP, l'environnement system et utilisateur sont "les mêmes" vous pourrez interagir avec l'utilisateur.
Re: [..] STD OUT & STD ERR
Posté : lun. 26 déc. 2011 20:21
par DimVar
Merci pour le retour d’expérience.
Concernant la déclaration du path, j'ai trouvé
ca qui nous dit que le chemin relatif peut être utilisé par la session de l'utilisateur en cours.
Donc dans le cas qui m'occupe, le relatif est à éviter.
Je clos.