2014-10-20 14 views
12

Ich versuche, eine Python-Anwendung zu debuggen, die psutil.Popen-Objekte verwendet. Wenn ich einen subprocess beginnen, ersetzt PyCharm meine Befehlszeile mit dem folgenden:Popen-Unterprozesse mit PyCharm debuggen

python -m pydevd.py --multiproc --client 127.0.0.1 --port 52581 --file <myapplication> 

, die in einem Fehler endet:

python.exe: Import by filename is not supported. 

Wenn ich den gleichen Befehl ohne -m Option starten, alles zu sein scheint fein. Gibt es eine Möglichkeit, PyCharms Debugger-Startbefehl zu ändern?

Ich habe aktualisiert PyCharm Community Edition 4.0.3 und der neue Debugger-Befehl wie folgt aussieht:

python.exe "C:\Program Files (x86)\JetBrains\PyCharm Community Edition 4.0.3\helpers\pydev\pydevd.py" 
--multiproc --client 127.0.0.1 --port 62661 
--file __main__.py local -c local.yml -f input/11_12.xls 

wo -c und -f mein Modul Kommandozeilenargumente sind. Der Debugger-Startbefehl wurde geändert, das Problem wurde jedoch nicht behoben. Ich bekomme immer noch den Import by filename is not supported Fehler.

Ein Codebeispiel ist verfügbar here at Bitbucket.org. PyCharm der Ausführungskonfiguration sollte wie folgt aussehen:

Script:   __main__.py 
Script parameters: server 
Working directory: %path to the repository% 
+0

Dies ist eine schwierige Frage. Ich muss mehr gucken. –

+0

Wie sieht aus? Ist es nur ein Name oder ein vollständiger Pfad? Wenn der Pfad vollständig ist, ändern Sie ihn nur in den Namen und stellen Sie sicher, dass der übergeordnete Ordner sich in 'sys.path' befindet. Vergleichen Sie mit http://StackOverflow.com/Questions/14465473/ –

+0

Mit dem gleichen Problem mit der Community Edition 3.4 konfrontiert (und mein 2. Tag der Python-Entwicklung). Kann jemand kommentieren, wenn es mit früheren Versionen jemals funktioniert hat? – Prabhjot

Antwort

9

Wie Piotr erwähnt, PyCharm 'Attach automatisch Teilprozess während des Debuggens'. Wenn der Subprozess ein Python-Prozess ist, ändert der PyCharm-Debugger die Startargumente des Prozesses (siehe Funktion patch_args unter source). Wenn Sie subprocess auf diese Weise beginnen:

args = ['python', 
     '-m', 'pycharm-multiprocess-debug', 
     'worker'] 
worker = subprocess.Popen(args) 

Der eigentliche Startbefehl ist wie:

python.exe -m "C:\Program Files (x86)\JetBrains\PyCharm Community Edition 4.0.3\helpers\pydev\pydevd.py" 
--multiproc --client 127.0.0.1 --port 62661 
--file pycharm-multiprocess-debug 

So falsch es ging. Es gibt mehrere Abhilfen ich finden kann:

  1. einfachste Weg, wenn Sie debuggen subprocess brauchen nicht nur ausschalten „Attach automatisch auf Teilprozess beim Debuggen“ innerhalb PyCharm

    Einstellungen
  2. Änderung Ihrer args zu:

    args = ['python', '__main__.py', 'worker'] 
    

    Der Nachteil ist, dass Sie nur eine Python-Datei ausführen können, kein Python-Modul.

  3. ich die letzte Lösung für Python subprocess empfehlen:

    from multiprocessing import Process 
    
    def server(): 
        p = Process(target=worker) 
        p.start() 
        print 'worker pid: {}'.format(p.pid) 
        p.join() 
    
+0

Die zweite Lösung löste das Problem. –

+0

wo soll ich diesen Code schreiben ?? args = ['python','__main__.py ',' worker '] –

+0

@MARCO, die 'args' sind in Ivan's Codebeispiel: https://bitbucket.org/lgyanf/pycharm-multiprocess-debug/src/ 973bebe2e1c249ff75f5db1e8ddaad0720a0dec5/__ main__.py?at=default – ZZY