[R] StdoutRead KO

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
DimVar
Niveau 10
Niveau 10
Messages : 870
Enregistré le : ven. 30 mai 2008 15:08
Status : Hors ligne

[R] StdoutRead KO

#1

Message 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.
Modifié en dernier par DimVar le jeu. 11 août 2016 10:56, modifié 1 fois.
N'évoquons pas la pierre, les jeunes risqueraient d'en poire !
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

Re: [..] StdoutRead KO

#2

Message 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
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [..] StdoutRead KO

#3

Message par jguinch »

@orax : Si plink écrit dans la sortie d'erreur (stderr), on ne le verra pas Euuh, et si on utilise StderrRead, non ?
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

Re: [..] StdoutRead KO

#4

Message 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.
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
Avatar du membre
DimVar
Niveau 10
Niveau 10
Messages : 870
Enregistré le : ven. 30 mai 2008 15:08
Status : Hors ligne

Re: [..] StdoutRead KO

#5

Message par DimVar »

Merci messieurs, je regarde dès que je peux.
N'évoquons pas la pierre, les jeunes risqueraient d'en poire !
Avatar du membre
DimVar
Niveau 10
Niveau 10
Messages : 870
Enregistré le : ven. 30 mai 2008 15:08
Status : Hors ligne

Re: [..] StdoutRead KO

#6

Message 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.
N'évoquons pas la pierre, les jeunes risqueraient d'en poire !
Avatar du membre
DimVar
Niveau 10
Niveau 10
Messages : 870
Enregistré le : ven. 30 mai 2008 15:08
Status : Hors ligne

Re: [..] StdoutRead KO

#7

Message 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...
N'évoquons pas la pierre, les jeunes risqueraient d'en poire !
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

Re: [..] StdoutRead KO

#8

Message 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)
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
Avatar du membre
DimVar
Niveau 10
Niveau 10
Messages : 870
Enregistré le : ven. 30 mai 2008 15:08
Status : Hors ligne

Re: [..] StdoutRead KO

#9

Message 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.
N'évoquons pas la pierre, les jeunes risqueraient d'en poire !
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

Re: [..] StdoutRead KO  

#10

Message 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.
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
Avatar du membre
DimVar
Niveau 10
Niveau 10
Messages : 870
Enregistré le : ven. 30 mai 2008 15:08
Status : Hors ligne

Re: [..] StdoutRead KO

#11

Message par DimVar »

Ok, merci pour tout.
Je clos.
N'évoquons pas la pierre, les jeunes risqueraient d'en poire !
Répondre