2016-01-18 41 views
8

Per un progetto che sto facendo, che usa scapy e quindi socket, devo essere in grado di eseguire il debug come root.Debug del progetto con root in PyDev/LiClipse

Ho già capito come avviare l'interprete come root senza che il sistema chiedesse il permesso. Ho aggiunto:

user  ALL=(root) NOPASSWD:/home/user/git/Project/bin/python2.7 

a /etc/sudoers.tmp. Il percorso che ho usato porta all'interprete python dell'ambiente virtuale che sto usando per questo progetto. Anche il progetto LiClipse sta usando questo percorso. Ora ho solo bisogno di fare in modo che LiClipse esegua l'interprete come root, ma non voglio avviare LiClipse come root. Voglio solo che usi questo interprete come root durante il debug. Come lo posso fare?

+0

@fabiozadrozny Re: il tag di modifica. Scapy è effettivamente menzionato nella domanda. Se è più rilevante di 'pydev' è una questione di opinione, però. –

+0

Concordato (aggiunto back scapy e cambiato liclipse <> pydev (come è più correlato a pydev che a liclipse) –

risposta

2

In questo caso, suggerisco di utilizzare il debug remoto. È quindi possibile far funzionare il processo come qualsiasi utente di cui ha bisogno e l'IDE può essere eseguito indipendentemente come un altro utente o anche su un altro server.

Supponendo che si stia utilizzando PyDev in LiClipse, è possibile configurare il debug remoto seguendo the documentation for remote debugging.

La premessa fondamentale è che si aggiunge alla biblioteca pydev debugger al percorso Python e includere il seguente in cui è necessario un punto di interruzione:

import pydevd 
pydevd.settrace('localhost', port=7788, stdoutToServer=True, stderrToServer=True) 

Poi si configura l'IDE con un'istanza pydev ascolto a quel server (7788) in questo caso.

Se si desidera utilizzare i punti di interruzione dall'IDE, è possibile aggiungere l'argomento suspend=False e il debugger non verrà sospeso finché non incontra i punti di interruzione.

+0

Ok, ci proverò! – vicco

+0

Una domanda: come aggiungo il file 'pydevd.py' al mio virtuale -interpreti dell'ambiente pythonpath? – vicco

+0

Ho fatto questo in PyCharm e la distribuzione contiene un egg python che ho installato usando 'easy_install' nel mio virtualenv, dato che' pip' non gestisce le uova. Fallo usando LiClipse/Eclipse + PyDev. –

2

In PyDev è possibile selezionare uno script di shell che a sua volta esegue il Python effettivo per eseguire l'esecuzione ... quindi, è possibile configurare lo script della shell per eseguire prima qualsiasi impostazione speciale.

cioè .: lo script potrebbe essere un file chiamato python_on_root.sh con contenuti quali:

#!/bin/bash 
source setup_env.bash 
sudo python "[email protected]" 

Poi, nella configurazione di interprete, selezionare il python_on_root.sh per creare un interprete che ti eseguire come root.

Si noti che lo stesso potrebbe essere fatto per altre cose interessanti - come ad esempio in esecuzione in un contenitore finestra mobile o l'attivazione di un ambiente Conda prima - il cielo è il limite;)

+0

Cosa c'è 'Setup_env.bash'? Questo esiste già, o devo scriverlo anche io?Sto usando 'source activate' per accedere all'ambiente virtuale. E cosa significa 'python" $ @ "'? – vicco

+1

Questo era solo un esempio su cosa puoi fare - non esiste né deve esistere - era solo per mostrare che puoi fare 'source' qualcosa;) –

+0

Ok, ho ottenuto il file sh - ora come faccio a selezionare questo file nel menu di configurazione dell'interprete? – vicco