web-dev-qa-db-fra.com

Arguments Pycharm et sys.argv

J'essaie de déboguer un script qui prend des arguments de ligne de commande en entrée. Les arguments sont des fichiers texte dans le même répertoire. Le script obtient les noms de fichiers de la liste sys.argv. Mon problème est que je ne peux pas lancer le script avec des arguments dans pycharm.

J'ai essayé d'entrer des arguments dans le champ "Paramètres de script" du menu "Exécuter"> "Modifier la configuration" comme suit:

-s'file1.txt', -s'file2.txt'

Mais cela n'a pas fonctionné. Comment lancer mon script avec des arguments?

P.S. Je suis sur Ubuntu

59
YKY

Dans PyCharm, les paramètres sont ajoutés dans le Script Parameters comme vous l'avez fait, mais ils sont entre guillemets"" et sans spécifier les indicateurs Interpreter tels que -s. Ces indicateurs sont spécifiés dans la zone Interpreter options.

Contenu de la boîte de paramètres de script: 

"file1.txt" "file2.txt"

Drapeaux d'interpéter:

-s

Ou, visuellement:

 enter image description here

Ensuite, avec un simple fichier test pour évaluer:

if __== "__main__":
    import sys
    print(sys.argv)

Nous obtenons les paramètres que nous avons fournis (avec sys.argv[0] contenant le nom du script bien sûr):

['/Path/to/current/folder/test.py', 'file1.txt', 'file2.txt']
82

Pour le bien des autres qui se demandent comment accéder à cette fenêtre. Voici comment:

Vous pouvez y accéder en cliquant sur Select Run/Debug Configurations (à gauche de  enter image description here ) et aller au Edit Configurations. A Gif fourni pour plus de clarté.

 enter image description here

50
tisaconundrum

En plus de la réponse de Jim (désolé, pas assez de reps pour faire un commentaire), je voulais simplement souligner que les arguments spécifiés dans PyCharm ont pas des caractères spéciaux échappés, contrairement à ce que vous feriez sur la ligne de commande. Donc, alors que sur la ligne de commande, vous feriez: 

python mediadb.py  /media/paul/New\ Volume/Users/paul/Documents/spinmaster/\*.png

le paramètre PyCharm serait: 

"/media/paul/New Volume/Users/paul/Documents/spinmaster/*.png"
9
Paul Miller

Notez que pour une raison inconnue, il n'est pas possible d'ajouter des arguments de ligne de commande dans la version de PyCharm Edu. Cela ne peut être fait que dans les éditions Professional et Community.

4
Jan Bodnar

Le premier paramètre est le nom du script que vous voulez exécuter. À partir du deuxième paramètre, ce sont les paramètres que vous souhaitez passer à partir de votre ligne de commande. Ci-dessous un script de test:

from sys import argv

script, first, second = argv
print "Script is ",script
print "first is ",first
print "second is ",second

Et voici comment vous passez les paramètres d'entrée: 'Chemin d'accès à votre script', 'Premier paramètre', 'Second paramètre'

Disons que le chemin d'accès à votre script est /home/my_folder/test.py, le résultat sera le suivant:

Script is /home/my_folder/test.py
first is First Parameter
second is Second Parameter

J'espère que cela m'aide, car il m'a fallu un certain temps pour comprendre que les paramètres d'entrée sont séparés par des virgules.

2
Rumela Saraswati

Ajoutez ce qui suit en haut de votre fichier Python. 

import sys

sys.argv = [
    __file__,
    'arg1',
    'arg2'
]

Maintenant, vous pouvez simplement cliquer avec le bouton droit sur le script Python.

1
Ahmed

Je crois que c'est inclus même dans la version Edu. Cliquez simplement avec le bouton droit de la souris sur le bouton fléché vert (Run) et choisissez "Ajouter des paramètres".

0
Py Learner

Sur PyCharm CE 2019.1+:

  1. Dans la barre de menus, cliquez sur Exécuter -> Modifier les configurations.
  2. Ajoutez vos arguments dans la zone de texte Paramètres (par exemple, file2.txt file3.txt ou --myFlag myArg --anotherFlag mySecondArg).
  3. Cliquez sur Appliquer
  4. Cliquez sur OK
0
Giorgos Myrianthous

Cela fonctionne dans la version edu pour moi. Il n'était pas nécessaire pour moi de spécifier une option -s dans les options de l'interpréteur.

 Pycharm parameters for running with command line

0
Awaa