Maison  >  Questions et réponses  >  le corps du texte

"Utilisation de ProcessBuilder pour la redirection de sortie"

<p>J'essaie de rediriger la sortie d'un processus démarré par ProcessBuilder à l'aide du code suivant : </p> <pre class="brush:php;toolbar:false;">ProcessBuilder pb = new ProcessBuilder("/myScript >> /myLogFile 2>&1 <& - &"); Map<String, String> env = pb.environment(); env.clear(); env.put("var1", "val1"); env.put("var2", "val2"); pb.redirectErrorStream(true); Processus p = pb.start();</pre> <p>Mais l'opération a échoué et a généré une exception : </p> <blockquote> <p>Exception dans le fil de discussion "principal" java.io.IOException : impossible d'exécuter programme "/monScript>> /monFichierJournal 2>&1 <& - & : java.io.IOException : erreur = 2, aucun fichier ou répertoire de ce type sur java.lang.ProcessBuilder.start(ProcessBuilder.java:460)</p> </blockquote> <p>Quand je passe simplement "/myScript", cela fonctionne bien. </p> <p>Le script est en Perl, des suggestions/commentaires sur les raisons de son échec ? </p> <p>J'ai essayé de les transmettre en tant que paramètres distincts comme <code>new ProcessBuilder("/myScript",">>","/myLogFile")</code> et cela a fonctionné, mais ne sera pas redirigé vers log et les envVars ne seront pas non plus acceptés. </p>
P粉517090748P粉517090748422 Il y a quelques jours424

répondre à tous(2)je répondrai

  • P粉204079743

    P粉2040797432023-08-25 10:53:05

    Selon vos besoins, à partir de Java7, vous pouvez continuer à utiliser ProcessBuilder, passez simplement le fichier exécutable en paramètre et utilisez redirectInput()redirectOutput()redirectError() dans la classe ProcessBuilder pour rediriger/intercepter son flux de sortie.

    répondre
    0
  • P粉818088880

    P粉8180888802023-08-25 10:07:03

    L'opérateur de redirection

    Shell est en ProcessBuilder中是未知的。将您的命令放在一个shell脚本中并执行它,如这里所示。或者,使用bash -c, comme indiqué ici.

    répondre
    0
  • Annulerrépondre