2016-04-13 13 views
0

Ich versuche, das folgende Skript in Java in Python geschrieben zu replizieren, aber ich sehe kein Äquivalent von Redirect.INHERIT in Python. Was wäre der richtige Ansatz für die Portierung?Python-Äquivalent von Java Redirect.INHERIT

import java.lang.ProcessBuilder; 
import java.lang.ProcessBuilder.Redirect; 

public class TestProcessBuilder { 
    public static void main(String args[]) { 
     try { 
      ProcessBuilder builder = new ProcessBuilder("fairymax"); 
      builder.redirectInput(Redirect.INHERIT); 
      builder.redirectOutput(Redirect.INHERIT); 
      builder.redirectError(Redirect.INHERIT); 

      Process subProcess = builder.start(); 
      subProcess.waitFor(); 
     } 
     catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 
+0

Die Dokumentation von [ 'subprocess'] (https://docs.python.org/3/library/subprocess.html) hat alles, was Sie brauchen. –

Antwort

0

Die Popen.communicate() - Methode des Subprozesses führt das gleiche wie der übergebene Codeblock aus.

import subprocess 
p = subprocess.Popen("fairymax").communicate() 

Ich habe dies getestet und es funktioniert mit Python, aber nicht Jython.

+0

es besteht keine Notwendigkeit, '.communicate()' aufzurufen, es sei denn, Sie leiten stdin/stdout/stderr um (wenn Sie 'subprocess.PIPE' nicht im Code sehen, rufen Sie' .communicate() 'nicht auf). – jfs

1

Redirect.INHERIT ist der Standard in Python. Um den Java-Code in Python emuliert:

#!/usr/bin/env python 
import subprocess 

rc = subprocess.call("fairymax")