Page 1 sur 1

[R] Comportement étrange de CMD (Get NVidia GPU's infos)

Posté : mar. 03 sept. 2024 06:14
par Anthony
Bonjour à tous,

Je viens de tomber sur un os, je sent que je ne suis pas loin mais je ne reçois pas le retour de ma ligne de commande.
Le but est d'afficher le taux d'utilisation de mon GPU mais ici étrangement je n'ai rien en retour...
Pourtant en batch çà fonctionne bien :shock:
gpu_usage.au3
(1.33 Kio) Téléchargé 22 fois
gpu_usage.bat
(91 Octets) Téléchargé 25 fois
Et le code de "gpu_usage.au3"
► Afficher le texte

Re: [..] Comportement étrange de CMD

Posté : mer. 04 sept. 2024 04:07
par Nine
Je soupçonne que c'est un problème de redirection. Essaie d'utiliser la ligne suivante au début du script :

Code : Tout sélectionner

If @OSArch = "X64" And Not @AutoItX64 Then _WinAPI_Wow64EnableWow64FsRedirection(False)

Re: [..] Comportement étrange de CMD

Posté : mer. 04 sept. 2024 23:44
par Anthony
Bonjour Nine,

Idem jusqu'à maintenant.
#include <WinAPIFiles.au3>

If @OSArch = "X64" And Not @AutoItX64 Then _WinAPI_Wow64EnableWow64FsRedirection(False)

; Chemin complet vers nvidia-smi
Local $sNvidiaSMIPath = "C:\Windows\System32\nvidia-smi.exe"
Local $sTempFile = @TempDir & "\gpu_usage.txt"
Local $sCommand = '"' & $sNvidiaSMIPath & '" --query-gpu=utilization.gpu --format=csv,noheader,nounits > "' & $sTempFile & '"'

ConsoleWrite("DEBUG: Commande à exécuter: " & $sCommand & @CRLF)
   
; Exécuter la commande et rediriger la sortie vers un fichier temporaire
Local $iPID = Run(@ComSpec & " /c " & $sCommand, "", @SW_HIDE, 6)
   
; Attendre un court instant pour que le fichier soit écrit
Sleep(1000)
   
; Vérifier si le fichier a été créé et lire son contenu
If FileExists($sTempFile) Then
   ConsoleWrite("DEBUG: Fichier temporaire trouvé: " & $sTempFile & @CRLF)
   Local $sResult = FileRead($sTempFile)
   ConsoleWrite("DEBUG: Contenu du fichier temporaire: " & $sResult & @CRLF)
   FileDelete($sTempFile) ; Supprimer le fichier temporaire après lecture
       
   If StringStripWS($sResult, 8) <> "" Then
      MsgBox(0, "Utilisation des GPU", $sResult)
   Else
      MsgBox(16, "Erreur", "Impossible de récupérer l'utilisation des GPU, aucune donnée reçue.")
   EndIf
Else
   ConsoleWrite("DEBUG: Fichier temporaire non trouvé ou commande n'a pas fonctionné." & @CRLF)
   MsgBox(16, "Erreur", "Erreur lors de l'exécution de nvidia-smi ou fichier de sortie introuvable.")
EndIf

Re: [..] Comportement étrange de CMD  

Posté : jeu. 05 sept. 2024 04:41
par Nine
Ah, ouais, il n'aime pas les guillemets autour du fichier d'output. Mais tu devrais plutôt opter pour une solution plus propre...

Code : Tout sélectionner

#include <WinAPIFiles.au3>

_WinAPI_Wow64EnableWow64FsRedirection(False)

; Chemin complet vers nvidia-smi
Local $sNvidiaSMIPath = "C:\Windows\System32\nvidia-smi.exe"
Local $sCommand = '"' & $sNvidiaSMIPath & '" --query-gpu=utilization.gpu --format=csv,noheader,nounits'

ConsoleWrite("DEBUG: Commande à exécuter: " & $sCommand & @CRLF)

; Exécuter la commande
Local $iPID = Run($sCommand, "", @SW_HIDE, $STDERR_MERGED)
ProcessWaitClose($iPID)
ConsoleWrite(StdoutRead($iPID) & @CRLF)

Re: [R] Comportement étrange de CMD

Posté : ven. 06 sept. 2024 15:59
par Anthony
Super,
Merci bien Nine, tout est bon.
Résolu ;)
#include <WinAPIFiles.au3>

_WinAPI_Wow64EnableWow64FsRedirection(False)

; Chemin complet vers nvidia-smi
Local $sNvidiaSMIPath = "nvidia-smi.exe"
Local $sCommand = '"' & $sNvidiaSMIPath & '" --query-gpu=gpu_bus_id,index,gpu_name,utilization.gpu,fan.speed,pstate,memory.used,memory.total,temperature.gpu,temperature.memory --format=csv,noheader,nounits'    ; nvidia-smi.exe --help-query-gpu

ConsoleWrite("DEBUG: Commande à exécuter: " & $sCommand & @CRLF)
   
; Exécuter la commande et rediriger la sortie vers un fichier temporaire
Local $iPID = Run($sCommand, "", @SW_HIDE, $STDERR_MERGED)
ProcessWaitClose($iPID)
ConsoleWrite(StdoutRead($iPID) & @CRLF)