2017-07-05 8 views
0

Ich implementiere eine Gateway-Server-Automatisierung mit Py4j-Modul.Der Gateway-Server muss jedes Mal initiiert werden, wenn der Benutzer die Funktion aufruft.Das Problem, das ich habe, ist, dass ich nicht bin um die Funktion im Hintergrund auszuführen. Hier ist der Code:Ausführen von MVN im Hintergrund von Python Popen und Thread-Funktion

def mvn(): 
logger = open("log.txt", 'w') 
logger.seek(0) 
thread1 = Thread(target=Popen, args=("./runJVM.sh"),kwargs= 
       {"stdout":logger}) 
thread1.daemon = True 
thread1.start() 
# stdout, error = proc.communicate() 
# logger.write(stdout) 
logger.close() 

Es gibt zwei Probleme Ich bin vor hier 1) Wenn ich die kwargs zu Logger (eine Protokolldatei Ausgabe zu überprüfen stdout angeben), wirft es mir eine Fehlermeldung, dass stdout hat Mehrere Argumente angegeben.

2) Wenn ich nicht die Option stdout angeben, wird die Ausgabe des Threads auf Ipython-Terminal angezeigt, die ich nicht wollte.

Alles was ich will ist, den Server im Hintergrund aufzurufen, so dass andere Funktionen auf den Java Gateway Server zugreifen können und auf die Methoden zugreifen können, die von ipython verwendet werden können.

Sie können davon ausgehen, dass die mvn-Funktionen einwandfrei funktionieren, wenn Sie direkt durch das Terminal laufen.

Vielen Dank

Antwort

0

Ich fand die Antwort auf die Frage.

Ich habe einen Thread erstellt, der den Popen-Befehl nimmt ein kleines Shell-Skript als Eingabe und übergeben stdout Parameter als Kwargs, so dass die Ausgabe nicht angezeigt wird. Der Server wurde aufgerufen und konnte von anderen Funktionen verwendet werden.

Hoffe, dass hilft

Verwandte Themen