IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Une commande introuvable


Sujet :

Python

  1. #1
    Membre averti
    Inscrit en
    Novembre 2012
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Novembre 2012
    Messages : 13
    Par défaut Une commande introuvable
    Bonjour
    Je travaille avec le simulateur de réseaux NS et SUMO, j'ai réalisé un traffic light avec SUMO (extension .sumocfg) et j'ai utilisé traceExporter.py comme commande dans un terminal pour convertir le fichier (.sumocfg) en .tcl pour l'utiliser sous NS voici la commande :
    traceExporter.py --fcd-input sumoTrace.xml --ns2-mobilityoutput ns2mobility.tcl
    J'ai eu le résultat suivant :
    bash: traceExporter.py : commande introuvable
    A titre d'information traceExporter.py s'est installé avec SUMO
    Comment je peux régler ce problème ?
    Merci d'avance

  2. #2
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 287
    Par défaut
    Bonjour

    Linux cherche les executables dans les dossiers indiqués dans la variable d'environnement PATH.
    Pour la connaître, il faut taper echo $PATH ou env.

    Il faut rajouter le dossier de l'executable au PATH.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PATH=$PATH":/autre/dossier/a/ajouter"
    Dans tous les cas, préciser le chemin d'accès peut débloquer la situation.
    Si c'est le répertoire courant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ./traceExporter.py --fcd-input sumoTrace.xml --ns2-mobilityoutput ns2mobility.tcl
    Enfin, le fichier doit avoir les droits en exécution.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    chmod +x traceExporter.py

  3. #3
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Par défaut
    Bonsoir.

    Citation Envoyé par Flodelarab Voir le message
    Il faut rajouter le dossier de l'executable au PATH.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PATH=$PATH":/autre/dossier/a/ajouter"
    Ne pas oublier la commande export

    Et pour que ce soit permanent :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    echo "export PATH=$PATH':/autre/dossier/a/ajouter'" >> ~/.bashrc
    source ~/.bashrc
    Idriss

  4. #4
    Membre averti
    Inscrit en
    Novembre 2012
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Novembre 2012
    Messages : 13
    Par défaut
    Bonjour
    Merci pour votre aide, la commade s'est exécutée mais elle s'est bloquée dans l'option --ns2-mobilityoutput c'est à dire que j'ai eu le résultat suivant : traceExporter.py: error: no such option: --ns2-mobilityoutput.
    Comment je peux régler ce problème ?
    Merci d'avance.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Salut,

    Comme l'indique le message d'erreur l'option --ns2-mobilityoutput n'existe pas telle que tu l'as spécifiée.


    http://sourceforge.net/apps/mediawik.../TraceExporter

    --ns2mobility-output <FILE> Generates a ns2 mobility file named <FILE>
    D'après la doc, Il manque un tiret entre mobility et output pour cette option.

    Je t'invite également à faire usage de l'option --help pour connaître les différentes options disponibles ainsi que leur syntaxe exacte.

  6. #6
    Membre averti
    Inscrit en
    Novembre 2012
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Novembre 2012
    Messages : 13
    Par défaut
    Bonjour
    Merci pour votre aide, j'ai corrigé l'option de la commande et çà marche, mais j'ai eu des erreurs en exécutant la commande qui sont les suivants :
    File "./traceExporter.py", line 225, in <module>
    sys.exit(main(sys.argv))
    File "./traceExporter.py", line 189, in main
    vIDm, vehInfo, begin, end, area = runMethod(options.fcd, options.ns2mobility, ns2.fcd2ns2mobility, options)
    File "./traceExporter.py", line 99, in runMethod
    ret = writer(procFCDStream(fcdStream, options), o, further)
    File "./../../tools/sumolib/output/convert/ns2.py", line 24, in fcd2ns2mobility
    for timestep in inpFCD:
    File "./traceExporter.py", line 83, in procFCDStream
    if v not in chosen: chosen[v] = random()<options.penetration
    TypeError: 'NoneType' object is not callable
    Comment je peux corriger ces erreurs, parce que le fichier que j'ai eu en sortie n'est pas complé ?
    Merci d'avance.

    A titre d'information le code de traceExporter.py est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
     
    #!/usr/bin/python
    """
    @file    convert_fcd2phem.py
    @author  Daniel Krajzewicz
    @date    2013-01-15
    @version $Id: traceExporter.py 13845 2013-05-02 13:53:19Z dkrajzew $
     
    A script for converting SUMO's fcd-output into files readable by PHEM.
     
    SUMO, Simulation of Urban MObility; see http://sumo.sourceforge.net/
    Copyright (C) 2013 DLR (http://www.dlr.de/) and contributors
    All rights reserved
    """
     
    import os, subprocess, sys, random
    sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', 'tools'))
    sys.path.append(os.path.join(os.environ.get("SUMO_HOME", os.path.join(os.path.dirname(__file__), '..', '..')), 'tools'))
     
    import sumolib.net
    import sumolib.output.convert.phem as phem
    import sumolib.output.convert.omnet as omnet
    import sumolib.output.convert.shawn as shawn
    import sumolib.output.convert.ns2 as ns2
    import sumolib.output.convert.gpsdat as gpsdat
    from random import gauss, random
    from datetime import datetime, timedelta
     
    class FCDVehicleEntry:
      def __init__(self, id, x, y, z, speed, typev, lane, slope):
        self.id = id
        self.x = x
        self.y = y
        self.z = z
        self.speed = speed
        self.type = typev
        self.lane = lane
        self.slope = slope
     
     
    class FCDTimeEntry:
      def __init__(self, t):
        self.time = t
        self.vehicle = []
     
    def disturb_gps(x, y, deviation):
        if deviation == 0:
            return x, y
        x += gauss(0, deviation)
        y += gauss(0, deviation)
        return x, y
     
    def _getOutputStream(name):
      if not name:
        return None
      return open(name, "w")
     
    def _closeOutputStream(strm):
      if strm: strm.close()
     
     
    def procFCDStream(fcdstream, options):
      pt = -1 # "prior" time step
      lt = -1 # "last" time step
      ft = -1 # "first" time step
      lastExported = -1
      chosen = {}
      for i,q in enumerate(fcdstream):
        pt = lt
        lt = float(q.time.encode("latin1"))
        if ft<0:
          # this is the first step contained in the simulation
          ft = lt # save it for later purposes
        if options.begin and options.begin>lt:
          continue # do not export steps before a set begin
        if options.end and options.end<=lt:
          continue # do not export steps after a set end
        if lastExported>=0 and (options.delta and options.delta+lastExported>lt):
          continue # do not export between delta-t, if set
        lastExported = lt
        e = FCDTimeEntry(lt)
        if q.vehicle:
          for v in q.vehicle:
            if v not in chosen: chosen[v] = random()<options.penetration
            if chosen[v]:
              x, y = disturb_gps(float(v.x), float(v.y), options.blur)
              if v.z: z = v.z
              else: z = 0
              e.vehicle.append(FCDVehicleEntry(v.id, x, y, z, v.speed, v.type, v.lane, v.slope))
        yield e
      t = lt-pt+lt
      yield FCDTimeEntry(t)
     
    def runMethod(inputFile, outputFile, writer, options, further={}):
        further["app"] = os.path.split(__file__)[1]
        if options.base>=0: further["base-date"] = datetime.fromtimestamp(options.base)
        else: further["base-date"] = datetime.now()
        o = _getOutputStream(outputFile)
        fcdStream = sumolib.output.parse(inputFile, "timestep")
        ret = writer(procFCDStream(fcdStream, options), o, further)
        _closeOutputStream(o)
        return ret
     
     
    def main(args=None):
      """The main function; parses options and converts..."""
      ## ---------- build and read options ----------
      from optparse import OptionParser
      optParser = OptionParser()
      optParser.add_option("-i", "--fcd-input", dest="fcd", metavar="FILE",
                             help="Defines the FCD-output file to use as input")
      optParser.add_option("-n", "--net-input", dest="net", metavar="FILE",
                             help="Defines the network file to use as input")
      optParser.add_option("-p", "--penetration", dest="penetration", 
                             default=1., help="Defines the percentage (0-1) of vehicles to export")
      optParser.add_option("-b", "--begin", dest="begin", 
                             type="float", help="Defines the first step to export")
      optParser.add_option("-e", "--end", dest="end", 
                             type="float", help="Defines the first step not longer to export")
      optParser.add_option("-d", "--delta-t", dest="delta", 
                             type="float", help="Defines the export step length")
      optParser.add_option("--gps-blur", dest="blur", default=0,
                             type="float", help="Defines the GPS blur")
      optParser.add_option("-s", "--seed", dest="seed", default=0,
                             type="float", help="Defines the randomizer seed")
      optParser.add_option("--base-date", dest="base", default=-1, type="int", help="Defines the base date")
      # PHEM
      optParser.add_option("--dri-output", dest="dri", metavar="FILE",
                             help="Defines the name of the PHEM .dri-file to generate")
      optParser.add_option("--str-output", dest="str", metavar="FILE",
                             help="Defines the name of the PHEM .str-file to generate")
      optParser.add_option("--fzp-output", dest="fzp", metavar="FILE",
                             help="Defines the name of the PHEM .fzp-file to generate")
      optParser.add_option("--flt-output", dest="flt", metavar="FILE",
                             help="Defines the name of the PHEM .flt-file to generate")
      # OMNET
      optParser.add_option("--omnet-output", dest="omnet", metavar="FILE",
                             help="Defines the name of the OMNET file to generate")
      # Shawn
      optParser.add_option("--shawn-output", dest="shawn", metavar="FILE",
                             help="Defines the name of the Shawn file to generate")
      # ns2
      optParser.add_option("--ns2activity-output", dest="ns2activity", metavar="FILE",
                             help="Defines the name of the ns2 file to generate")
      optParser.add_option("--ns2config-output", dest="ns2config", metavar="FILE",
                             help="Defines the name of the ns2 file to generate")
      optParser.add_option("--ns2mobility-output", dest="ns2mobility", metavar="FILE",
                             help="Defines the name of the ns2 file to generate")
      # GPSDAT
      optParser.add_option("--gpsdat-output", dest="gpsdat", metavar="FILE",
                             help="Defines the name of the gpsdat file to generate")
      # parse
      options, remaining_args = optParser.parse_args(args=args)
     
      if options.seed:
        random.seed(options.seed)
      ## ---------- process ----------
      net = None
      ## ----- check needed values
      if options.delta and options.delta<=0:
        print "delta-t must be a positive value."
        return 1
      # phem
      if (options.dri or options.fzp or options.flt) and not options.fcd:
        print "A fcd-output from SUMO must be given using the --fcd-input."
        return 1
      if (options.str or options.fzp or options.flt) and not options.net:
        print "A SUMO network must be given using the --net-input option."
        return 1
      # omnet
      if options.omnet and not options.fcd:
        print "A fcd-output from SUMO must be given using the --fcd-input."
        return 1
      ## ----- check needed values
     
      ## ----- OMNET
      if options.omnet: runMethod(options.fcd, options.omnet, omnet.fcd2omnet, options)
      ## ----- OMNET
     
      ## ----- Shawn
      if options.shawn: runMethod(options.fcd, options.shawn, shawn.fcd2shawn, options)
      ## ----- Shawn
     
      ## ----- GPSDAT
      if options.gpsdat: runMethod(options.fcd, options.gpsdat, gpsdat.fcd2gpsdat, options)
      ## ----- GPSDAT
     
      ## ----- ns2
      if options.ns2mobility or options.ns2config or options.ns2activity: 
        vIDm, vehInfo, begin, end, area = runMethod(options.fcd, options.ns2mobility, ns2.fcd2ns2mobility, options)
      if options.ns2activity: 
        o = _getOutputStream(options.ns2activity)
        ns2.writeNS2activity(o, vehInfo)
        _closeOutputStream(o)
      if options.ns2config: 
        o = _getOutputStream(options.ns2config)
        ns2.writeNS2config(o, vehInfo, options.ns2activity, options.ns2mobility, begin, end, area)
        _closeOutputStream(o)
      ## ----- ns2
     
      ## ----- PHEM
      # .dri
      if options.dri: runMethod(options.fcd, options.dri, phem.fcd2dri, options)
      # .str (we need the net for other outputs, too)
      if options.str or options.fzp or options.flt:
        if not options.net:
          print "A SUMO network must be given using the --net-input option."
          return 1
        if not net: net = sumolib.net.readNet(options.net)
        o = _getOutputStream(options.str)
        sIDm = phem.net2str(net, o)
        _closeOutputStream(o)
      # .fzp
      if options.flt or options.fzp: 
        vIDm, vtIDm = runMethod(options.fcd, options.fzp, phem.fcd2fzp, options, {"phemStreetMap":sIDm})
      # .flt    
      if options.flt:
        o = _getOutputStream(options.flt)
        phem.vehicleTypes2flt(o, vtIDm)
        _closeOutputStream(o)
      ## ----- PHEM
      return 0
     
     
    if __name__ == "__main__":
      sys.exit(main(sys.argv))

  7. #7
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Il n'est vraiment pas facile de "rentrer" dans ton code de plus de 200 lignes, mais l'erreur est assez explicite:

    File "./traceExporter.py", line 83, in procFCDStream
    if v not in chosen: chosen[v] = random()<options.penetration
    TypeError: 'NoneType' object is not callable
    Cette erreur arrive quand une variable est égale à None et qu'on cherche à l'appeler comme une fonction. Par exemple:

    Aurais-tu utilisé le mot random pour autre chose que la fonction random du module random? => chercher avec l'éditeur

    Tu peux aussi pister ton erreur en ajoutant des "print" ou en utilisant un outil de debugging qui te permettra de questionner la valeur des variables.

  8. #8
    Membre averti
    Inscrit en
    Novembre 2012
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Novembre 2012
    Messages : 13
    Par défaut
    traceExporter.py a été installé avec un simulateur de mobilité urbaine que j'ai utilisé qui s'appelle SUMO, traceExporter.py se trouve dans tools/bin de SUMO et qui permet de convertir un fichier d'entrée (en xml) en d'autres formats. Donc je n'ai rien modifié dans ce fichier, je l'ai seulement utilisé comme commande de conversion comme je l'ai indiqué en haut

  9. #9
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 305
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 305
    Par défaut
    Salut,

    Comme dit par tyrtamos, insers un print dans le code pour voir l'état de random.

    D'autre part il y a de toute façon une anomalie d'import avec random
    Ligne 15
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    import os, subprocess, sys, random
    Ligne 25
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    from random import gauss, random
    Ligne 155
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        random.seed(options.seed)
    Donc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    >>> import random
    >>> from random import random
    >>> random.seed()
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    AttributeError: 'builtin_function_or_method' object has no attribute 'seed'
    >>>
    Du code à vérifier quoi.

  10. #10
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 159
    Par défaut
    Hello,
    c'est pas que je ne veuille pas me plonger dans ce code (qu'apparemment tu n'as ni écrit, ni modifié), ni te faire partir de developpez.net, mais il s'agit de l'utilisation d'un code existant, peu utilisé par le "grand public".
    SUMO propose des listes de diffusion ici : http://sumo-sim.org/userdoc/Contact.html
    La liste sumo-user semble très active.
    Tu auras plus de chances de trouver de l'aide là bas (je suppose).

Discussions similaires

  1. Ecrire le résultat d'une commande dans un fichier de l' OS
    Par Labienus dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 26/02/2004, 11h04
  2. [LG]plantage sur une commande basique !
    Par Jeff on the web dans le forum Langage
    Réponses: 5
    Dernier message: 13/01/2004, 19h07
  3. Passage d'une commande à un programme
    Par nicolas.pissard dans le forum C++Builder
    Réponses: 5
    Dernier message: 04/11/2003, 13h37
  4. Réponses: 2
    Dernier message: 24/06/2003, 20h31
  5. [VB6] probleme de redirection d'une commande DOS
    Par WriteLN dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 10/06/2003, 09h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo