Gambas France BETA


Pas de compte ? Incription

console / process

Ce sujet est résolu.

12
AuteurMessages
jibi#1 Posté le 29/12/2011 à 13:44:07
codergambas.jimdofree.comBonjour

je lance un Process :
SHELL "commande" FRO READ AS "Process"
je récupère la sortie dans la SUb Process_Read() dans une textAerea

Jusque là pas de souci

Par contre si j'ai un retour de console avec demande d'intervention de l'utilisateur :
Comment faire pour inter agir avec ce process qui demande une intervention utilisateur?

Mis à part de remplacer le Process par une console Xterm par exemple, je ne vois pas comment?
Y a t'il un composant console?


avec DBusSignal peut être?

Merci d'avance
Jibi

Debian GNU/Linux 11 64-bit

linuxos#2 Posté le 29/12/2011 à 15:40:14
Un peu de sel, de poivre et la crevette sera... Bonjour,

Lors de l'invocation d'une commande exterieure avec SHELL, pour interagir avec la commande invoquée il faut préciser le mot WRITE dans la ligne de la commande SHELL et utiliser un objet Process (ici Process1)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
PUBLIC Process1 AS Process


PUBLIC SUB Demarrer_Cmd_Exterieure()

Process1 = SHELL "commande" FOR READ WRITE AS "Process"

END

PUBLIC SUB Process_Read()

' Reception du texte répose de la commande exterieure

END

PUBLIC SUB Envoyer_Texte()

PRINT #Process1, "Texte que l on veux envoyer a la commande exterieure"

END


Voila,

Olivier
Lorsqu'on s'occupe d'informatique, il faut faire comme les canards... Paraître calme en surface et pédaler comme un forcené par en dessous.
jibi#3 Posté le 29/12/2011 à 16:01:25
codergambas.jimdofree.comMerci Olivier
je vais voir avec ça si je m'en sors
Debian GNU/Linux 11 64-bit

jibi#4 Posté le 29/12/2011 à 17:15:28
codergambas.jimdofree.comVoilà ce que j'ai :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
PUBLIC Process1 AS Process

PUBLIC SUB Button1EnvoiCmd_Click()
Process1 = SHELL (TextBox1.Text) FOR READ WRITE AS "Process"
TextArea1.Text &= TextBox1.Text
END

PUBLIC SUB Button3Reponse_Click()
PRINT #Process1, TextBox2.Text
END

PUBLIC SUB Process_Read()
DIM sLigne AS STRING
READ #LAST, sLigne, -256
TextArea1.Text &= sLigne
TextArea1.Pos = TextArea1.Length
END

PUBLIC SUB Process_Kill()
TextArea1.Text &= "\nFIN du PROCESS"
END

PUBLIC SUB Process_Error(erreur AS STRING)
END


si en textBox1 je met ls => ok ca me liste bien dans ma textAerea
pareil avec un test avec kdesudo ls => c ok

si je met kdesudo apt-get remove xterm => je n'ai aucun retour dans la textAerea même pas avant demande confirmation de suppression
si j'enlève le Write dans For Read Write As "Process" j'ai bien un retour dans la textAerea mais là je ne peux pas entrer ma réponse puisque pas de Write?

avec gksudo j'ai un retour mais lors de la demande de confirmationpar O/n , j'cris donc O ou N mais rien ne se passe => dans un terminal avec ps -aux le processus est toujours actif ! donc en attente de réponse O ou N => ne reçoit pas l'envoi de Print #Process1, TextBox2.Text

Debian GNU/Linux 11 64-bit

linuxos#5 Posté le 29/12/2011 à 22:38:51
Un peu de sel, de poivre et la crevette sera... Peux tu essayer d'ajouter '> 2&>1' a la fin de chaque commande que tu exécutes avec SHELL. On ne sait jamais, parfois certaine commande renvoie leur texte dans le canal 2 ou 3 de la console.

Si cela ne change rien, peux tu essayer de faire la même chose en utilisant EXEC a la place de SHELL ?
Attention avec la commande EXEC, il te faut découper toutes les options de ta commande dans un tableau de string (String[]) et faire attention car la commande EXEC execute directement une commande sans invoquer un terminal derrière, donc pas d'interprétation des caractères possible.

Exemple de commande qui ne fonctionne pas avec EXEC:

ls toto*.txt ; cd /tmp <= 2 commandes sur la même ligne
ls *.txt | sort <= Utilisation du PIPE proscris

Par contre:

ls toto*.txt

Enfin, regarde bien dans la documentation, il existe 2 façons d'utiliser chacune des commande SHELL et EXEC.

SHELL "commande a executer" FOR READ WRITE AS "Process"
SHELL "commande a executer" FOR INPUT OUTPUT AS "Process"

EXEC ["commande","argument1","Argument2"] FOR READ WRITE AS "Process"
EXEC ["commande","argument1","Argument2"] FOR INPUT OUTPUT AS "Process"

En espérant avoir été clair.

Olivier
Lorsqu'on s'occupe d'informatique, il faut faire comme les canards... Paraître calme en surface et pédaler comme un forcené par en dessous.
jibi#6 Posté le 30/12/2011 à 12:26:55
codergambas.jimdofree.comBonjour

Donc j'ai essayé toutes les façons possibles exec shell input output read write avec ou sans '> 2&>1'
rien n'y fait
Par contre avec input output cela est beaucoup plus fluide mais quand je veux entrer la réponse à la commande
gksudo apt-get remove xterm
qui est O ou N => pas de réponse . je dirais plutôt que ce n'est pas transmis au processus qui reste actif après vérification

Et quand je ferme le processus en console manuellement avec sudo kill n° de Process, j'ai un retour qui m'indique bien que le process est KILL puisque j'ai
1
2
3
PUBLIC SUB Process_Kill()
TextArea1.Text &= "\nFIN du PROCESS"
END
Aussi j'ai essayé avec l'exemple gambas3 console, et là, surprise, c'est exactement pareil alors que la commande EXEC de l'exemple est bien écrite avec READ WRITE

D'autre part je ne comprend pas pourquoi la commande Kdesudo est très mal lue, en fait avec kdesudo la ponctuation se transforme en un charabia !!

Ah au fait j'utilise Gambas3 SVN #4357 sous Kubuntu 10.04 LTS
Debian GNU/Linux 11 64-bit

linuxos#7 Posté le 30/12/2011 à 13:11:53
Un peu de sel, de poivre et la crevette sera... Erretum de ma part: c'est 2>&1 et pas 2&>1

Mais cela ne changera apparemment rien a ton problème, mais peux tu essayer tout de même pour éliminer cet possibilité.

Tu peux vérifier aussi si lorsque tu lances la cmd 'kdesudo', le process ne se fork pas (fork: il se dédouble ou change de n° de process).

Je ne peux pas le faire, je n'utilise pas KDE mais Gnome.

Si au bout du compte, rien n'y fait, cela veut peut être dire que la commande 'Kdesudo' est pas très bien écrite et ne renvoie pas des données standard.

Olivier
Lorsqu'on s'occupe d'informatique, il faut faire comme les canards... Paraître calme en surface et pédaler comme un forcené par en dessous.
jibi#8 Posté le 30/12/2011 à 13:24:21
codergambas.jimdofree.comRe
Bon, pour kdesudo, c'est une chose! a priori c'est un problème de utf ou qqchose comme çà!

mais même avec gksudo cela ne fonctionne pas
Pourtant, comme tu le dis toi même et dans tous les exemples que j'ai pu voir, on peut répondre à une commande si elle demande une réponse?

as tu pu voir l'exemple de gambas si chez toi c'est pareil?

merci encore de ta disponibilité Linuxos

jibi
Debian GNU/Linux 11 64-bit

jibi#9 Posté le 30/12/2011 à 18:39:06
codergambas.jimdofree.comj'ai testé sous Ubuntu avec gnome c'est la même chose, de même pour l'exemple gambas console (avec les droits écrire et lire)

donc a priori pas possible de répondre par un process avec input output ou read write

si qqun à une idée

merci à vous tous
Debian GNU/Linux 11 64-bit

linuxos#10 Posté le 30/12/2011 à 18:49:48
Un peu de sel, de poivre et la crevette sera... SI je pense que c'est possible. Je testerai demain quand j'aurais plus de temps.

Chez moi ça marche, donc il n'y a pas de raison.

Olivier
Lorsqu'on s'occupe d'informatique, il faut faire comme les canards... Paraître calme en surface et pédaler comme un forcené par en dessous.
jibi#11 Posté le 30/12/2011 à 19:18:12
codergambas.jimdofree.comre

voilà j'ai mis mon projet de test console en téléchargement ici :
http://codergambas.jimdo.com/codes-sources-en-gambas3/utilitaire/consoletest/
si cela peut t'être utile

Bon réveillon
Debian GNU/Linux 11 64-bit

jibi#12 Posté le 1/1/2012 à 20:54:38
codergambas.jimdofree.comBonjour

J'ai testé avec sudo à la place de Kdesudo ou Gksudo:

Ne pouvant pas entrer le pwd de sudo en mode graphique, j'ai enregistré un temps de validité du pwd de 30 mn pour mes essais
et là, et bien cela fonctionne très bien !

=> le seul hic c'est que avec sudo, si le temps de validité du pwd est null comme cela est par défaut chez moi, je suis bloqué : pas possible d'entrer le pwd

J'ai donc testé sous Ubuntu et Kubuntu
Kubuntu la demande de mot de passe de sudo ne s'affiche pas dans la textaera
Ubuntu la demande de mot de passe de sudo s'affiche dans la textaera => problème résolu sous Ubuntu, le mot de passe peut être entré avec sudo si je ne me sers pas de Gksudo

Pourquoi l'un Ubuntu et pas l'autre Kubuntu?

==>
Gksudo ou kdesudo
Cela ne fonctionne pas avec ces 2 commandes graphiques, la réponse au processus ne peut être entrée
En tout cas, uniquement chez moi d'après ce que j'ai pu comprendre
Mais alors.....
Telle est la question : pourquoi?

Debian GNU/Linux 11 64-bit

linuxos#13 Posté le 1/1/2012 à 21:57:25
Un peu de sel, de poivre et la crevette sera... Pourquoi tu ne peux pas entrer le mot de passe en graphique, il te suffit d'un formulaire avec un TextBox + l'option Password = True et le tour est jouer ?

Olivier
Lorsqu'on s'occupe d'informatique, il faut faire comme les canards... Paraître calme en surface et pédaler comme un forcené par en dessous.
jibi#14 Posté le 1/1/2012 à 22:01:39
codergambas.jimdofree.comCe n'est pas le mot de passe que je ne peut entré en mode graphique(kdesudo ou gksudo), puisque j'ai bien la fenêtre Linux adéquate qui s'ouvre

avec Gksudo ou Kdesudo, si la commande entrée telle que Gksudo apt-get remove xterm demande une réponse, dans ce cas j'ai beau entrer O ou N, le processus reste en attente, l'entrée par print ne lui arrive pas
Debian GNU/Linux 11 64-bit

jibi#15 Posté le 1/1/2012 à 22:15:07
codergambas.jimdofree.comY aurait il un rapport avec ma version de gambas3

car sous Kubuntu je suis avec Gambas3 SVN #4357 sous Kubuntu 10.04 LTS
=> la demande de mot de passe ne s'affiche pas dans la textaera
avec Ubuntu je suis avec la version gambas3 2.99.3 NON svn sous ubuntu 10.10
=> la demande de mot de passe s'affiche dans la textAera

et cela avec le même projet
Debian GNU/Linux 11 64-bit

12