OVH Cloud OVH Cloud

Process InputStream et OutputStream

9 réponses
Avatar
Isammoc
Bonjour la compagnie,

Je pense que ca a du déjà être abordé plus d'une fois ici, mais:

Comment affecter les entrées sorties d'un process?

J'ai besoin d'effectuer une commande qui pendant son exécution, prend pas
mal de commandes, et renvoie la réponse. Mais je ne sais pas comment
affecter les InputStream et OutputStream de ce cher process.

Si quelqu'un pouvait m'aider, je lui en serait reconnaissant.

Merci

--
Isammoc

9 réponses

Avatar
Isammoc
Bonjour la compagnie,

Je pense que ca a du déjà être abordé plus d'une fois ici, mais:

Comment affecter les entrées sorties d'un process?

J'ai besoin d'effectuer une commande qui pendant son exécution, prend
pas mal de commandes, et renvoie la réponse. Mais je ne sais pas
comment affecter les InputStream et OutputStream de ce cher process.

Si quelqu'un pouvait m'aider, je lui en serait reconnaissant.


pour affiner ma demande:
Comment faire pour que le process prenne en compte les entrées claviers de
la classe appelante?

Merci


Isammoc

Avatar
nioubi
Isammoc wrote:
J'ai besoin d'effectuer une commande qui pendant son exécution, prend
pas mal de commandes, et renvoie la réponse. Mais je ne sais pas
comment affecter les InputStream et OutputStream de ce cher process.

Comment faire pour que le process prenne en compte les entrées claviers de
la classe appelante?


Bonjour,

si j'ai bien compris il faut que les i/o soient asynchrones.

Voila un mini exemple avec `cat` :

import java.io.*;

public class Test {
private Thread listener = null;

public static void main (String args[]) {
new Test().doJob();
}

private void doJob() {
String cmd = "cat";
String strinp = "";

try {
Runtime r = Runtime.getRuntime();
Process shell = r.exec(cmd);

final BufferedWriter bw = new BufferedWriter(new
OutputStreamWriter(shell.getOutputStream()));
final BufferedReader br = new BufferedReader(new
InputStreamReader(shell.getInputStream()));

// lecture clavier
listener = new Thread() {
public void run() {
BufferedReader in = new BufferedReader(new
InputStreamReader(System.in));
String s = "";

while (listener == Thread.currentThread()) {
try {
s = in.readLine();
bw.write(s+"n");
bw.flush();
}
catch (Exception ex) { ex.printStackTrace();}
}
}
};
listener.start();

// lecture resultat commande
while ((strinp = br.readLine()) != null) {
System.out.println(strinp);
}

bw.close();
br.close();
}
catch (Exception ex) { ex.printStackTrace();}
}
}

Avatar
Isammoc
nioubi écrivait
news:41a4b14b$0$21301$:

Isammoc wrote:
J'ai besoin d'effectuer une commande qui pendant son exécution, prend
pas mal de commandes, et renvoie la réponse. Mais je ne sais pas
comment affecter les InputStream et OutputStream de ce cher process.

Comment faire pour que le process prenne en compte les entrées
claviers de la classe appelante?


Bonjour,

si j'ai bien compris il faut que les i/o soient asynchrones.

Voila un mini exemple avec `cat` :


Merci, c'est un truc du genre qu'il me fallait, je teste ca de suite, et je
te dis le résultat.

--
Isammoc


Avatar
Isammoc
J'ai besoin d'effectuer une commande qui pendant son exécution,
prend pas mal de commandes, et renvoie la réponse. Mais je ne sais
pas comment affecter les InputStream et OutputStream de ce cher
process.

Comment faire pour que le process prenne en compte les entrées
claviers de la classe appelante?


Bonjour,

si j'ai bien compris il faut que les i/o soient asynchrones.

Voila un mini exemple avec `cat` :


Merci, c'est un truc du genre qu'il me fallait, je teste ca de suite,
et je te dis le résultat.


Erf, ca ne fonctionne pas:
ce que je dois faire fonctionner, c'est la commande "who -m" et ca ne
marche pas :'(

--
Isammoc



Avatar
nioubi
Isammoc wrote:
ce que je dois faire fonctionner, c'est la commande "who -m" et ca ne
marche pas :'(
As-tu essayé avec : String[] cmd = {"who", "-m"};


Par ailleurs dans ce cas-là je ne vois pas la nécessité de gérer les
entrées interactives du clavier ???

Avatar
Isammoc
ce que je dois faire fonctionner, c'est la commande "who -m" et ca ne
marche pas :'(
As-tu essayé avec : String[] cmd = {"who", "-m"};


Par ailleurs dans ce cas-là je ne vois pas la nécessité de gérer les
entrées interactives du clavier ???


De ce que j'ai compris, la commande who prend l'entrée standard pour savoir
le tty du terminal. Donc, il le lui faut, je supputes.

--
Isammoc


Avatar
nioubi
Isammoc wrote:
De ce que j'ai compris, la commande who prend l'entrée standard pour savoir
le tty du terminal. Donc, il le lui faut, je supputes.
Ce n'est pas la sémantique de `who -m` que je connais. Il faudrait

vérifier dans le man.

Avatar
Isammoc
nioubi écrivait
news:41a5dd18$0$30329$:

Isammoc wrote:
De ce que j'ai compris, la commande who prend l'entrée standard pour
savoir le tty du terminal. Donc, il le lui faut, je supputes.
Ce n'est pas la sémantique de `who -m` que je connais. Il faudrait

vérifier dans le man.


C'est dit dans le "info who"

--
Isammoc


Avatar
nioubi
Isammoc wrote:
Ce n'est pas la sémantique de `who -m` que je connais. Il faudrait
vérifier dans le man.


C'est dit dans le "info who"


Sans feedback sur la proposition
As-tu essayé avec : String[] cmd = {"who", "-m"};


ni info précise sur le systeme utilisé et le comportement de son
`who`, je n'ai rien à ajouter.

The who utility displays a list of all users currently logged on, showing
for each user the login name, tty name, the date and time of login, and
hostname if not local.

Available options:

-m Only print information about the current terminal.


pas de référence ici à une entrée clavier interactive.