Page 1 sur 1

[R] StdoutRead KO

Posté : mar. 19 juil. 2016 14:58
par DimVar
Hi all,

Le code fonctionne quand je fais du DIR sur C:\windows (comme dans un post de thierry)
La ligne de commande fonctionne quand je l'execute dans une fenetre CMD.
Ce code (ci-dessous) ne fonctionne pas (fichier vide) quand je remplace le DIR par plink.exe

Code : Tout sélectionner

Local $Stream = RunWait(@ComSpec & ' /c plink.exe -ssh -t toto@domain -pw pass ls /path/fichier', "", @SW_HIDE,$STDERR_CHILD + $STDOUT_CHILD)
Local $line
While 1
    $line = StdoutRead($Stream)
    If @error Then ExitLoop
    FileWrite("Test.txt", $line)
Wend
ShellExecute("Test.txt")

Une idee ? (run ou runwait, meme combat)

D'avance merci.

Dimvar.

Re: [..] StdoutRead KO

Posté : mar. 19 juil. 2016 15:26
par orax
Si plink écrit dans la sortie d'erreur (stderr), on ne le verra pas. Il n'y a que stdout qui est lu.

Il faudra remettre Run (à la place de RunWait).

C'est facultatif mais je pense que ça serait mieux de vérifier si $line contient quelque chose avant de l'écrire dans le fichier.
If $line <> "" Then
      FileWrite("Test.txt", $line)
   EndIf

Re: [..] StdoutRead KO

Posté : mar. 19 juil. 2016 22:51
par jguinch
@orax : Si plink écrit dans la sortie d'erreur (stderr), on ne le verra pas Euuh, et si on utilise StderrRead, non ?

Re: [..] StdoutRead KO

Posté : mar. 19 juil. 2016 22:55
par orax
Si si, mais StderrRead n'est justement pas utilisé dans son code.
Mon message n'était pas très clair, je voulais dire avec le code actuel on ne le verra pas.

Re: [..] StdoutRead KO

Posté : mer. 27 juil. 2016 14:05
par DimVar
Merci messieurs, je regarde dès que je peux.

Re: [..] StdoutRead KO

Posté : ven. 05 août 2016 16:21
par DimVar
Me revoila :
#include <Constants.au3>

Local $Stream = Run(@ComSpec & ' /c plink.exe -ssh -t user@host -pw password ls ', "", @SW_SHOW,$STDERR_CHILD + $STDOUT_CHILD)
Local $out = ""
Local $err = ""
Sleep(2000)
$out = StdoutRead($Stream)
$err = StderrRead ($Stream)

MsgBox(0,"", "$out = " & $out & @CRLF & "$err = " & $err)
maintenant que je lis la sortie ERR, j'obtiens :
Unable to read from standard input: Descripteur non valide
J'ai passé le parametre en SHOW, pour voir si ma ligne de comamnde plink etait bien prise en compte, mais je vois juste une fenetre CMD qui s'ouvre et se ferme.
Si bien sur j'execute cette ligne de commande (plink......) manuellement dans une fenetre de commande, RAS, j'ai bien le resultat de "LS" qui s'affiche.

Re: [..] StdoutRead KO

Posté : ven. 05 août 2016 16:32
par DimVar
Avec la commande "DIR", j'ai bien le retour.
Completement par depis, j'ai ajouté #requireadmin et ca marche !
Si qqun peut m'expliquer...

Re: [..] StdoutRead KO

Posté : ven. 05 août 2016 17:24
par orax
>Unable to read from standard input: Descripteur non valide
Apparemment, il essaie de lire l'entrée standard (stdin), mais il ne peut pas. Le descripteur (handle) est "non valide" parce qu'il n'existe pas. En ajoutant $STDIN_CHILD ça semble corriger ce problème.
#include <Constants.au3>

Local $pid = Run('plink.exe -ssh -t demo@test.rebex.net -pw password ls', "", @SW_HIDE, $STDIN_CHILD + $STDOUT_CHILD + $STDERR_CHILD)
Local $out = ""
Local $err = ""

ProcessWaitClose($pid)

$out = StdoutRead($pid)
$err = StderrRead($pid)

MsgBox(0, "", "$out = " & $out & @CRLF & "$err = " & $err)

Re: [..] StdoutRead KO

Posté : lun. 08 août 2016 09:01
par DimVar
Bonjour orax,


Merci.
Cela veut il dire qu'il s'agit d'un bug ? Vu que je ne lit que les sorties (err & out). Ou dois je ajouter systématiquement "$STDIN_CHILD" lorsque je lis une stdout/stderr ?

Cdlt.

[EDIT] 2e question : en admettant que je lance un script unix de manière distante avec Plink, et que le script me demande confirmation (répondre par "y" ou "n"), est il possible d'y "répondre" ? Sachant que je connais la reponse et qu'elle sera toujours affirmative.

Re: [..] StdoutRead KO  

Posté : mar. 09 août 2016 19:22
par orax
Normalement, ce n'est pas nécessaire d'ajouter $STDIN_CHILD pour lire les sorties STDOUT ou STDERR. C'est la première fois que je rencontre ce problème.

Re: [..] StdoutRead KO

Posté : jeu. 11 août 2016 10:55
par DimVar
Ok, merci pour tout.
Je clos.