Un exemple de ce que je cherche à faire ?
Par exemple avoir un retour dans la console de ce genre de commande :
ffmpeg -i input.wav -vn -ar 44100 -ac 2 -b:a 192k output.mp3
Bon ça reste qu'un exemple mais le programme que je cherche à écrire c'est pour faire des conversions audio/vidéo toute bête mais j'aimerais le retour dans mon programme, pas que ça s'ouvre salement en dehors :/
Après si la chose permet d'intercepter les choses permettant d'alimenter en réponses utilisateur, je prends ...
J'ai rien trouvé de concluant et de propre
Si déjà j'arrive à ça je serais content ^^
Programme en ligne de commande et programme en ligne de commande
Re: Programme en ligne de commande et programme en ligne de commande
Bonsoir,
Est-ce ce que tu cherches a obtenir ?La partie (+ " < yes.txt") peut-être remplacée par l'option -y a insérer dans la variable option$Dans ce cas, aucun message n'est affiché dans la console sauf a changer l'option (-v quiet)
cage
Est-ce ce que tu cherches a obtenir ?
Code : Tout sélectionner
EnableExplicit
OnErrorGoto(?ErrorHandler)
; Exemple: ffmpeg -i input.wav -vn -ar 44100 -ac 2 -b:a 192k output.mp3
Global infile$ = "input.wav"
Global outfile$ = "output.mp3"
Global options$ = "-v quiet"
Procedure convert()
RunProgram("cmd.exe", "/c ffmpeg.exe " + options$ + " -i "+ infile$ + " -vn -ar 44100 -ac 2 -b:a 192k " + outfile$ + " < yes.txt", #Empty$, #PB_Program_Wait)
EndProcedure
If OpenConsole()
ConsoleTitle("Exemple avec FFMPEG")
PrintN("")
convert()
PrintN("") : PrintN("") : Print("Appuyez sur Q pour (Q)uitter ")
Repeat
Delay(20)
Until UCase(Inkey()) = "Q"
EndIf
CloseConsole()
ErrorHandler:
End
; Valid loglevel "-v". Possible levels are numbers Or:
; "quiet"
; "panic"
; "fatal"
; "error"
; "warning"
; "info"
; "verbose"
; "debug"
; "trace"
; Global options (affect whole program instead of just one file):
; -y overwrite output files
; -n never overwrite output files
Code : Tout sélectionner
Global options$ = "-v quiet -y"
cage
■ Win10 Pro 64-bit (Intel Celeron CPU N2920 @ 1.86GHz, 4,0GB RAM, Intel HD Graphics) & PB 6.12 LTS
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
Re: Programme en ligne de commande et programme en ligne de commande
Si tu n'as pas besoin d'interagir en cours de conversion, alors tu peux générer le log et analyser ce dernier.le programme que je cherche à écrire c'est pour faire des conversions audio/vidéo toute bête mais j'aimerais le retour dans mon programme, pas que ça s'ouvre salement en dehors
C'est un moyen plus fiable que d'essayer de capter le contenu de la console qui peut être différent selon le code page de cette dernière et qui peut être refermé par un autre programme. C'est comme cela qu'on procède le souvent en administration système.
Petit example (testé) qui lance une conversion puis cherche "successfully decoded" dans le log.
(Il suffit d'utiliser FindString ou les RegEx sur la variable Txt$ pour extraire ce qu'on veut)
Code : Tout sélectionner
; Récupération et analyse log ffmpeg.exe
; (C)Marc56 - 2022/06/15
; https://www.purebasic.fr/french/viewtopic.php?t=18686
EnableExplicit
Enumeration
#Win
#Edit
EndEnumeration
SetGadgetFont(#PB_Default, FontID(LoadFont(#PB_Any, "Consolas", 10)))
OpenWindow(#Win, 100, 100, 800, 600, "", #PB_Window_SystemMenu | #PB_Window_SizeGadget)
CreateStatusBar(0, WindowID(#Win))
AddStatusBarField(#PB_Ignore)
StatusBarText(0, 0, "")
EditorGadget(#Edit, 5, 5, WindowWidth(#Win) - 10, WindowHeight(#Win) - StatusBarHeight(0) - 10)
StatusBarText(0, 0, "Conversion en Cours. Veuillez Patienter...")
; --- Donner un nom fixe au fichier de log
; (sinon il est horodaté HHMMSS ce qui rend difficile la relecture)
; voir aide ffmpeg.exe https://ffmpeg.org/ffmpeg.html
; chercher -report
SetEnvironmentVariable("FFREPORT", "file=ffreport.log")
; --- Convertir
RunProgram("ffmpeg",
"-i input.wav -vn -ar 44100 -ac 2 -b:a 192k output.mp3 -report -y",
"C:\Tmp",
#PB_Program_Hide | #PB_Program_Wait)
StatusBarText(0, 0, "Conversion Terminée. Chargement fichier de Log")
; --- Lecture Log
If Not OpenFile(0, "C:\Tmp\ffreport.log")
Debug "Fichier non chargé" : End
EndIf
While Not Eof(0)
Define Txt$ = ReadString(0, #PB_Ascii | #PB_File_IgnoreEOL)
Wend
CloseFile(0)
SetGadgetText(#Edit, Txt$)
; --- Analyse du log (exemple)
If FindString(Txt$, "successfully decoded")
StatusBarText(0, 0, "Succès !")
Else
StatusBarText(0, 0, "Erreur")
EndIf
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
End
Case #PB_Event_SizeWindow
ResizeWindow(#Win, #PB_Ignore, #PB_Ignore, WindowWidth(#Win), WindowHeight(#Win) )
ResizeGadget(#Edit, #PB_Ignore, #PB_Ignore, WindowWidth(#Win) - 10, WindowHeight(#Win) - 32)
Case #PB_Event_Gadget
Select EventGadget()
EndSelect
EndSelect
ForEver
End
- Comme ffmpeg.exe est lancé avec #PB_Program_Hide, il n'ouvre pas de fenêtre.
- Pas besoin de CMD /C ou /K ici puisqu'on n'a pas d'interaction avec le shell et que ffmpeg n'est pas une commande interne.

Re: Programme en ligne de commande et programme en ligne de commande
Bonjour,
Bataille de point de vue, mais je ne fais qu'essayer de répondre a la question:
cage
Bataille de point de vue, mais je ne fais qu'essayer de répondre a la question:
Je note que NY152 parle de mode Console, alors je le laisse réponde sur sa vraie demande et ses vrais besoins. Toutes les solutions sont bonnes a condition de réponde au mieux a la demande.J'ai écris plusieurs programmes fonctionnant en mode console. Dans ces programme, je fais appel de temps en temps à des programmes externes (FFMPEG par exemple mais le soucis se produit avec tous les programmes que j'ai pu tester) et au lieu d'avoir le retour dans le même invite de commande, une nouvelle fenêtre s'ouvre et bien sûr ces fenêtres se ferment à la fin de leurs exécutions et je perd le retour de ces programmes (pas simple quand le retour est indispensable à la suite du programme ...)
Ma question est simple : pourquoi les programmes externes ne s'affichent pas dans le même invite de commande que mon programme laçant ces derniers ? Il y a t-il un moyen de forcer la chose ?
Pour information, j'ai testé mes programmes avec la console graphique (avec le paramètre EnableGraphicalConsole) et aussi sans. J'ai testé divers options de compilation mais sans succès
Merci de m'aider à trouver la solution permettant d'exécuter mes programmes externe "proprement" ^^
cage
■ Win10 Pro 64-bit (Intel Celeron CPU N2920 @ 1.86GHz, 4,0GB RAM, Intel HD Graphics) & PB 6.12 LTS
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
Re: Programme en ligne de commande et programme en ligne de commande
L'idée est bonne mais j'y ai déjà répondu, utiliser les entrées utilisateurs pour l'écrasement du fichier n'est un détail, pourquoi bloquer dessus ^^ Oublions ce détail. Je mettais le doigt dessus car comme le programme appelé ne l'ai pas dans la console active, c'est pas top pour répondre et si le programme appelé se ferme tout de suite derrière, on perd la fenêtre et son contenu, l'utilisateur n'a pas l'info donc ...cage a écrit : mer. 15/juin/2022 22:59 Bonsoir,
Est-ce ce que tu cherches a obtenir ?La partie (+ " < yes.txt") peut-être remplacée par l'option -y a insérer dans la variable option$Code : Tout sélectionner
EnableExplicit OnErrorGoto(?ErrorHandler) ; Exemple: ffmpeg -i input.wav -vn -ar 44100 -ac 2 -b:a 192k output.mp3 Global infile$ = "input.wav" Global outfile$ = "output.mp3" Global options$ = "-v quiet" Procedure convert() RunProgram("cmd.exe", "/c ffmpeg.exe " + options$ + " -i "+ infile$ + " -vn -ar 44100 -ac 2 -b:a 192k " + outfile$ + " < yes.txt", #Empty$, #PB_Program_Wait) EndProcedure If OpenConsole() ConsoleTitle("Exemple avec FFMPEG") PrintN("") convert() PrintN("") : PrintN("") : Print("Appuyez sur Q pour (Q)uitter ") Repeat Delay(20) Until UCase(Inkey()) = "Q" EndIf CloseConsole() ErrorHandler: End ; Valid loglevel "-v". Possible levels are numbers Or: ; "quiet" ; "panic" ; "fatal" ; "error" ; "warning" ; "info" ; "verbose" ; "debug" ; "trace" ; Global options (affect whole program instead of just one file): ; -y overwrite output files ; -n never overwrite output files
Dans ce cas, aucun message n'est affiché dans la console sauf a changer l'option (-v quiet)Code : Tout sélectionner
Global options$ = "-v quiet -y"
cage
Ma recherche principale est d'avoir l'affichage du programme appelé au sein du mien (si en plus on peut répondre aux demandes ...) mais ces programme s'ouvre dans une fenêtre secondaire
Bref, je cherche encore ...
Bel exemple qui me resservira pour un petit outil que je compte écrire pour mon serveur web de dev ^^cage a écrit : mer. 15/juin/2022 22:59 Bonsoir,
Est-ce ce que tu cherches a obtenir ?La partie (+ " < yes.txt") peut-être remplacée par l'option -y a insérer dans la variable option$Code : Tout sélectionner
EnableExplicit OnErrorGoto(?ErrorHandler) ; Exemple: ffmpeg -i input.wav -vn -ar 44100 -ac 2 -b:a 192k output.mp3 Global infile$ = "input.wav" Global outfile$ = "output.mp3" Global options$ = "-v quiet" Procedure convert() RunProgram("cmd.exe", "/c ffmpeg.exe " + options$ + " -i "+ infile$ + " -vn -ar 44100 -ac 2 -b:a 192k " + outfile$ + " < yes.txt", #Empty$, #PB_Program_Wait) EndProcedure If OpenConsole() ConsoleTitle("Exemple avec FFMPEG") PrintN("") convert() PrintN("") : PrintN("") : Print("Appuyez sur Q pour (Q)uitter ") Repeat Delay(20) Until UCase(Inkey()) = "Q" EndIf CloseConsole() ErrorHandler: End ; Valid loglevel "-v". Possible levels are numbers Or: ; "quiet" ; "panic" ; "fatal" ; "error" ; "warning" ; "info" ; "verbose" ; "debug" ; "trace" ; Global options (affect whole program instead of just one file): ; -y overwrite output files ; -n never overwrite output files
Dans ce cas, aucun message n'est affiché dans la console sauf a changer l'option (-v quiet)Code : Tout sélectionner
Global options$ = "-v quiet -y"
cage
.:NY152:.