8
votes

Processus nécessite une entrée redirigée

J'ai un exécutable natif unix qui oblige les arguments à nourrir comme celui-ci

prog.exe

foo.txt a deux lignes: bar Baz

J'utilise java.lang.processBuilder pour exécuter cette commande. Malheureusement, PROG.EXE ne fonctionnera que sur le redirection d'un fichier. Y a-t-il une manière que je peux imiter ce comportement en Java?

bien sûr, xxx

ne fonctionne pas.

merci!


0 commentaires

5 Réponses :


0
votes

Avez-vous essayé d'envelopper prog.exe code> dans un script qui accepte des arguments et de traiter avec prog.exe code>? Je suppose que vous utilisez une coquille, il est donc assez simple de configurer un script Bash.

Si je comprends votre problème, le script ressemblerait à: p>

#!/usr/bin/bash
echo $1 > file
echo $2 >> file
prog.exe < file
remove file


1 commentaires

Ce serait bien, mais le point de ceci est de porter de Unix à Windows. Donc, je n'aurai pas de coquille sur la nouvelle plate-forme.



1
votes

La redirection est configurée par la coquille dont vous avez besoin pour le faire manuellement, quelque chose comme ça:

Process proc = pb.start();
OutputStreamWriter os = new OutputStreamWriter(proc.getOutputStream());
// then write the data from your file to os
// ...
os.close();


0 commentaires

10
votes
ProcessBuilder pb = new ProcessBuilder("prog.exe");
Process p = pb.start();
OutputStream pos = p.getOutputStream();

InputStream fis = new FileInputStream("file.txt");
byte[] buffer = new byte[1024];
int read = 0;
while((read = fis.read(buffer)) != -1) {
    pos.write(buffer, 0, read);
}
fis.close();
Not tested, but something like this should work.

2 commentaires

Dans mon cas (JDK 6), je devais utiliser le constructeur InputStream qui prend un fichier. La chaîne avec le chemin n'a pas fonctionné pour moi. Merci Marc. E.g.: Inpurstream FIS = nouveau fichierInputtream (nouveau fichier ("/ chemin / chemin / fichier.txt"));


Vous pouvez également utiliser pb.redirectinput (fichier);



0
votes

Créez le processus à l'aide d'un ProcessBuilder , puis utilisez process.getoutPutStream () pour obtenir une sortie de sortie qui conduira à l'entrée standard du processus.

Ouvrir Le fichier utilisant des techniques de Java normales, lisez le contenu du fichier et écrivez-le sur la sortie sur le processus que vous avez effectué avec le ProcessBuilder .

Le problème que vous avez en ce moment est que vous appelez le processbuilder pour lancer xxx

ce qui n'est probablement rien près de ce que vous voulez réaliser.


0 commentaires

2
votes

J'ai fini par faire quelque chose comme ça et ça marche. Merci pour votre aide! xxx


0 commentaires