2009-11-12 29 views
0

Pylint fait quelque chose d'étrange sur ma boîte Windows - quelque chose qui ne devrait pas être possible. Ce n'est pas une question à propos de la fixation du pylint, mais plutôt de ma compréhension.Comment pylint quitte-t-il la boîte de commande Windows dans laquelle il s'exécute?

J'ai une installation typique de la dernière version de pylint, Python 2.6 et Windows Vista. Si j'ouvre une invite de commande et lance pylint à partir de la ligne de commande, il s'exécute avec succès, puis quand il arrive à la fin du programme, il ne quitte pas simplement à la ligne de commande, mais ferme l'ensemble Fenêtre Invite de commandes. J'ai eu un bref aperçu du code en ligne (que je suppose être le code qui est actuellement en cours d'exécution) et ils appellent sys.exit() avec différents niveaux d'erreur, mais ma lecture et les tests suggèrent que devrait encore juste retourner à la ligne de commande avec l'ensemble de niveaux d'erreur approprié. Pylint est également exécuté dans le cadre du programme de test de mon projet, et il fonctionne ici, me suggérant que si on l'appelle comme une méthode Python plutôt qu'à partir de la ligne de commande, il n'a pas le même problème (probablement pas d'appel à sys.exit() dans ce chemin de code.)

Par quel mécanisme pylint peut-il fermer la "coque" qui le contient?

Si c'est un bug dans Pylint? Je ne vois pas comment. Un bug en Python? Un bug dans Windows?

+2

Est-ce que pyLint est exécuté à partir d'un fichier batch? –

+1

En effet, c'est. Jim, vous méritez le crédit de deviner la réponse en premier, mais Wallyk m'a donné une réponse, plutôt qu'un commentaire, sur lequel voter. – Oddthinking

Répondre

2

Je viens d'essayer ceci sur XP:

t.bat:

exit

L'exécution de cette ferme la fenêtre! Peut-être que la ligne de commande pour pylint utilise un fichier de commandes qui contient une sortie?

+1

Oui, @wallyk, le répertoire des scripts Python contient pylint.bat qui contient en effet une sortie. Mon modèle mental de Python et Windows est restauré. Je te remercie. – Oddthinking

1

Ceci est une solution très facile. Allez dans votre dossier de scripts python et localisez pylint.bat et ouvrez-le dans le bloc-notes.

Il lire ce qui suit

@echo off 
rem = """-*-Python-*- script 
rem -------------------- DOS section -------------------- 
rem You could set PYTHONPATH or TK environment variables here 
python -x "%~f0" %* 
goto exit 

""" 
# -------------------- Python section -------------------- 
import sys 
from pylint import lint 
lint.Run(sys.argv[1:]) 


DosExitLabel = """ 
:exit 
exit(ERRORLEVEL) 
rem """

Pour résoudre la question à des changements de fermeture rapide à la

@echo off 
rem = """-*-Python-*- script 
rem -------------------- DOS section -------------------- 
rem You could set PYTHONPATH or TK environment variables here 
python -x "%~f0" %* 
goto exit 

""" 
# -------------------- Python section -------------------- 
import sys 
from pylint import lint 
lint.Run(sys.argv[1:]) 


DosExitLabel = """ 
:exit 
ECHO. 
rem exit(ERRORLEVEL) 
rem """

suite Fondamentalement tout ce que je ne commentait de la sortie (ERRORLEVEL) avec "rem" mot-clé puis avant qu'il ne revienne à l'invite, j'ai ajouté une impression de ligne vide avec "ECHO". de sorte que l'invite ne soit pas faussée avec la sortie.