Sys.argv d'ou vient argv?

Résolu
sbg -  
fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

Je suis en phase d'apprentissage en Python et j'essaye d'évoluer d'une façon autonome, c.a.d. une fois les notions de base acquises trouver mes solutions en na vigant dans le monde Python (à l'instar de ce qu'on fait à l'aide du man dans Unix). Or, j'ai bcp de mal a trouver la logique que nous permet d'"enquêter qui est qui" dans le monde Python.

L'exemple ci-dessous illustre cela:

>>> import sys

>>> dir('sys')
['__add__', '__class__', '__contains__', '__delattr__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__getslice__', '__gt__', '__hash__', '__init__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '_formatter_field_name_split', '_formatter_parser', 'capitalize', 'center', 'count', 'decode', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'index', 'isalnum', 'isalpha', 'isdigit', 'islower', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']

>>> for arg in sys.argv: print arg
...
py_quicklook.py
-p
bef
-e
(...)

Démarche/question (dites moi qu'est-ce que vas pas dans mon raisonnement):

- Je comprends (?!) que "sys" est un package comprenant des modules;
- Par ailleurs, je comprends que "tout est un objet dans Python";
- J'utilise donc dir('') pour connaître les attributs et methodes liées à cet objet, en pensant que les methodes/functions sont les "calls des modules".

Or, je n'ai rien que montre que je peux "faire appel" à "argv" ?!...

En espérant avoir été claire et concise.
Un grand merci d'avance,

S.

4 réponses

  1. Utilisateur anonyme
     
    Je ne suis pas un spécialiste Python mais je crois que tout n'est pas objet dans Python, loin de là, il y a un savant mélange de procédural et objet

    en l'occurence sys.argv est une liste, liste de paramètres passé au système lors de l'appel d'un script python genre
    python script.py toto tata

    voir ici https://docs.python.org/3/library/sys.html
    0
    1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      mais je crois que tout n'est pas objet dans Python, loin de là
      En python tout est objet.

      en l'occurence sys.argv est une liste, liste de paramètres passé au système lors de l'appel d'un script python genre
      python script.py toto tata

      Oui, et donc cela devrait être restitué par la fonction dir : l'objet de la question ^^.
      0
    2. Utilisateur anonyme
       
      Ha bon, tout objet...
      0
    3. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      Oui tout est objet ;-))). Même les int (type natif).
      0
  2. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    Bonjour,
    Or, je n'ai rien que montre que je peux "faire appel" à "argv" ?!...
    Normal, tu as fait dir('sys') ce qui équivalent à dir(str) puisque 'sys' est un string.
    Tu voulais faire dir(sys) qui là retournera tous les attributs et méthodes du module sys. Et tu auras le fameux argv ;-))).

    Cdlt,
    0
  3. sbg
     
    Merci pour votre réactivité. Votre réponse me fait progresser.

    Toutefois en essence ma question est:

    Comment connaître ce dont je dispose (function/methode), ici = "argv" dans la boite "sys"?

    Un autre exemple,

    >>>import matplotlib.pyplot as mpl
    >>> dir('mpl')
    ['__add__', '__class__', '__contains__', '__delattr__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__getslice__', '__gt__', '__hash__', '__init__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '_formatter_field_name_split', '_formatter_parser', 'capitalize', 'center', 'count', 'decode', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'index', 'isalnum', 'isalpha', 'isdigit', 'islower', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']

    je comprends que les fonctions dont je dispose sont celles ennonces... mais non, il y (plein) d'autres:

    mpl.subplots_adjust
    mpl.figtext
    mpl.savefig
    ...

    Mais comment les trouver?!!!
    0
  4. sbg
     
    Merci Fiddy, tu m'as donné la solution!
    Si simple, si facile, et pourtant j'etais sur des rails.

    Cdlt,
    0