Je teste du code python qui analyse les entrées en ligne de commande. Existe-t-il un moyen de transmettre cette entrée via IDLE? Actuellement, je sauvegarde dans l'éditeur IDLE et je lance à partir d'une invite de commande.
J'utilise Windows.
Il ne semble pas que IDLE offre un moyen de le faire via l'interface graphique, mais vous pouvez faire quelque chose comme:
idle.py -r scriptname.py arg1 arg2 arg3
Vous pouvez également définir sys.argv
manuellement, comme suit:
try:
__file__
except:
sys.argv = [sys.argv[0], 'argument1', 'argument2', 'argument2']
(Crédit http://wayneandlayne.com/2009/04/14/using-command-line-arguments-in-python-in-idle/ )
À la limite, le numéro 2 de Seth a fonctionné ....
2) Vous pouvez ajouter une ligne de test devant votre appel de fonction principale qui fournit un tableau d'arguments (ou crée un test unitaire qui fait la même chose.).
Par exemple...
sys.argv = ["wordcount.py", "--count", "small.txt"]
Voici quelques façons auxquelles je peux penser:
1) Vous pouvez appeler votre fonction "principale" directement sur la console IDLE avec des arguments si vous le souhaitez.
2) Vous pouvez ajouter une ligne de test devant votre appel de fonction principale fournissant un tableau d'arguments (ou créer un test unitaire faisant la même chose) ou définir directement sys.argv.
3) Vous pouvez exécuter python en mode interactif sur la console et passer des arguments:
C:\> python.exe -i some.py arg1 arg2
#! /usr/bin/env python3
import sys
# Prompt user for (optional) command line arguments, when run from IDLE:
if sys.modules['idlelib']: sys.argv.extend(input("Args: ").split())
Remplacez "input" par "raw_input" pour Python2.
Ce code fonctionne très bien pour moi. Je peux utiliser "F5" dans IDLE, puis rappeler à partir de l'invite interactive:
def mainf(*m_args):
# Overrides argv when testing (interactive or below)
if m_args:
sys.argv = ["testing mainf"] + list(m_args)
...
if __== "__main__":
if False: # not testing?
sys.exit(mainf())
else:
# Test/sample invocations (can test multiple in one run)
mainf("--foo=bar1", "--option2=val2")
mainf("--foo=bar2")
Basé sur le post de danben, voici ma solution qui fonctionne dans IDLE:
try:
sys.argv = ['fibo3_5.py', '30']
fibonacci(int(sys.argv[1]))
except:
print(str('Then try some other way.'))
Visual Studio 2015 a un addon pour Python. Vous pouvez fournir des arguments avec cela. VS 2015 est maintenant gratuit.
Il semble y avoir autant de façons de le faire que d’utilisateurs. Étant moi-même un noob, je viens de tester des arguments (combien). Lorsque l'inactif démarre à partir de l'Explorateur Windows, il n'a qu'un seul argument (... c'est-à-dire que len (sys.argv) renvoie 1), sauf si vous avez démarré l'IDLE avec des paramètres. IDLE est juste un fichier bat sous Windows ... qui pointe vers idle.py; sur linux, je n'utilise pas d'inactivité.
Ce que j'ai tendance à faire, c'est au démarrage ...
if len(sys.argv) == 1
sys.argv = [sys.argv[0], arg1, arg2, arg3....] <---- default arguments here
Je me rends bien compte qu’il s’agit d’un marteau, mais si vous n’affichez que l’IDLE en cliquant dessus lors de l’installation par défaut, cela fonctionnera. La plupart de ce que je fais est d'appeler le python depuis un autre langage. Le seul cas où cela fait une différence, c'est quand je teste.
Il est facile pour un noob comme moi de comprendre.
La réponse de veganaiZe produit une KeyError en dehors de IDLE avec python 3.6.3. Ceci peut être résolu en remplaçant if sys.modules['idlelib']:
par if 'idlelib' in sys.modules:
comme ci-dessous.
import argparse
# Check if we are using IDLE
if 'idlelib' in sys.modules:
# IDLE is present ==> we are in test mode
print("""====== TEST MODE =======""")
args = parser.parse_args([list of args])
else:
# It's command line, this is production mode.
args = parser.parse_args()
système d'importation
sys.argv = [sys.argv [0], '-arg1', 'val1', '-arg2', 'val2']
// Si vous passez en ligne de commande pour 'help' ou 'verbose', vous pouvez dire en tant que:
sys.argv = [sys.argv [0], '-h']