2016-07-16 23 views
0

Folgendes hat in Python 2.7 funktioniert, ich glaube, das ist, was ich verwendet habe. Ich versuche gerade, alles auf Python 3.4 zu aktualisieren, und das funktioniert überhaupt nicht. Wenn ich das Programm starte, stoppt es einfach und scheint keine Prozesse auszuführen, die ich ausführen möchte. Ich möchte, dass der bestimmte Prozess mehrere Male gleichzeitig ausgeführt wird (der Subprozess aktualisiert sich selbst auf einen neuen Wert, so dass er nicht jedes Mal dasselbe versucht). Was mache ich falsch?Python 3.4 Subprozess

#!/usr/bin/ python3.4 
import sys 
import subprocess 
procs=[] 
for i in range(3): 
    proc=subprocess.Popen(['python','test.py']) 
    procs.append(proc) 


for proc in procs: 
    proc.wait() 

ich gerade versucht:

#!/usr/bin/python3.4 
import sys 
import subprocess 
procs=[] 
for i in range(3): 
    print ('hello') 
    proc=subprocess.Popen(['python','test.py']) 
    print ('hi') 
    procs.append(proc) 
    print ('goodbye') 

for proc in procs: 
    proc.wait() 

Es druckt die drei hallo, hallo, auf Wiedersehen in Ordnung, aber ich schrieb eine schnelle:

#!/usr/bin/python3.4 
print('hello') 

für test.py und es doesn‘ t führen Sie das Programm überhaupt aus.

+0

Funktioniert gut für mich mit einem 'test.py', das nur" Hallo "druckt. Was macht dein 'test.py' Skript? Vielleicht fügen Sie etwas Debug-Code hinzu. – mhawke

+1

ist der Raum nach '/ bin /' absichtlich? – Elazar

+0

Code in Ihrem Hauptskript hinzufügen, Dinge drucken und sehen, wo es fehlschlägt. Zum Beispiel print (i) in der ersten for-Schleife. –

Antwort

0

Das Problem liegt möglicherweise an der Art, wie Sie Python für den Subprozess aufrufen. Wenn der Interpreter explizit als python script.py aufgerufen wird, wird der "Hashbang" ignoriert und der Interpreter wird python sein. Abhängig von Ihrem System könnte dies eine andere Version von Python sein. In Ihrem Code verwendet Popen(['python','test.py']) explizit python als Interpreter. Wenn Sie eine andere Version des Interpreters haben, z. Python 2.7, als der Standard-Interpreter, der dann ausgeführt wird, nicht Python 3.4, wie Sie gehofft hatten.

Wenn wiederum Ihr Unterprozessskript mit Python 2.7 nicht ordnungsgemäß ausgeführt wird, was bei Verwendung von tkinter der Fall sein könnte, haben Sie möglicherweise das Problem, dass Sie haben.

Wenn dies das Problem ist, können Sie es beheben, indem Sie explizit den richtigen Interpreter verwenden, z.

Popen(['python3.4','test.py']) 

Oder Sie könnten auf dem Hash-Bang verlassen, um den richtigen Interpreter aufzurufen:

Popen(['/path/to/test.py']) 

, die zur Verfügung gestellt sollten funktionieren, dass das Skript eine ausführbare Datei Berechtigungen.

+0

Danke, das macht den Trick. Nun, wenn ich nur die Anzahl der Prozesse korrekt ausführen könnte, wäre es nett. Manchmal wird der Prozess dreimal ausgeführt, andere Male wird er nur einmal ausgeführt. Es ist auf diese Weise sehr inkonsequent. – confused