2014-10-20 20 views
12

Sto provando a eseguire il debug di un'applicazione Python che utilizza oggetti psutil.Popen. Quando inizio un sottoprocesso, PyCharm sostituisce la mia linea di comando con il seguente:Debug dei sottoprocessi Popen con PyCharm

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

che finisce in un errore:

python.exe: Import by filename is not supported. 

Quando lancio lo stesso comando senza -m opzione, tutto sembra essere bene. C'è un modo per cambiare il comando di avvio del debugger di PyCharm?

Ho aggiornato a PyCharm Community Edition 4.0.3 e il nuovo comando debugger assomiglia a:

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 

dove -c e -f sono argomenti della riga di comando di mio modulo. Il comando di avvio del debugger è stato modificato, ma non ha risolto il problema; Ricevo ancora l'errore Import by filename is not supported.

Un esempio di codice è disponibile here at Bitbucket.org. configurazione di esecuzione di PyCharm dovrebbe essere simile:

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

Questa è una dura. Devo guardare di più. –

+0

Come appare ''? È solo un nome o percorso completo? Se si tratta di percorso completo, provare a cambiarlo per nominare solo e assicurarsi che la cartella principale si trovi in ​​'sys.path'. Confronta con http://stackoverflow.com/questions/14465473/ –

+0

Affrontando lo stesso problema con Community Edition 3.4 (e il mio secondo giorno di sviluppo di python). Qualcuno può commentare se ha funzionato con le versioni precedenti di sempre? – Prabhjot

risposta

9

Come detto Piotr, PyCharm 'Fissare al sottoprocesso automaticamente durante il debug'. Se il sottoprocesso è un processo Python, il debugger PyCharm cambia gli argomenti di avvio del processo (vedere la funzione patch_args allo source). Quando si avvia il sottoprocesso in questo modo:

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

Il comando effettivo avvio è simile:

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 

Così è andata male. Ci sono diverse soluzioni che posso trovare:

  1. modo più semplice, se non è necessario eseguire il debug sottoprocesso, basta spegnere "allegare al sottoprocesso automaticamente durante il debug" dentro PyCharm Opzioni

  2. cambiare la vostra args a:

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

    Lo svantaggio è che è possibile eseguire solo un file Python, non un modulo Python.

  3. vi consiglio l'ultima soluzione per Python sottoprocesso:

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

La seconda soluzione ha risolto il problema. –

+0

dove dovrei scrivere quel codice ?? args = ['python', '__main__.py', 'worker'] –

+0

@MARCO, il 'args' è nell'esempio del codice di Ivan: https://bitbucket.org/lgyanf/pycharm-multiprocess-debug/src/ 973bebe2e1c249ff75f5db1e8ddaad0720a0dec5/__ main__.py?at=default – ZZY