2012-05-04 1 views
1

Je suis curieux de définir une variable en utilisant optparse. Je cours le programme en tant que tel;Définition d'une variable avec optparse en Python

programname.py -dc: \ users \\ etc \ etc \ etc

Je veux être en mesure d'utiliser -d C: \ Users \\ etc \ etc pour remplir une variable appelée, "chemin" , que j'utilise plus tard dans le programme. Cela peut-il être fait? Voici le code optionparser que j'ai. J'appelle plus tard la variable Path, que j'utilise pour remplir un dictionnaire.

erreur que je reçois est:

E:> japp_id.py -d "C: \ Users \\ AppData \ Roaming \ Microsoft \ Windows \ \ récents AutomaticDestinations" retraçage (appel le plus récent en dernier): fichier "E: \ japp_id.py", ligne 30, à pour ids à os.listdir (chemin): NameError: nom 'path' est pas défini

try: 
    import os 
    import sys 
    import urllib2 
    from BeautifulSoup import BeautifulSoup 
    from optparse import OptionParser 
except ImportError: 
    print 'Imports not installed' 
    sys.exit() 

def main(): 
usage = "usage: %prog [options] arg1 arg2" 
parser = OptionParser() 
parser.add_option("-d", "--default", action="callback", type="string", dest="dpath") 

(opts, args) = parser.parse_args() 


if opts.dpath == None: 
    parser.print_help() 
    parser.error("You must supply a -d for dpath") 
if not os.path.isfile(opts.dpath): 
    parser.error("%s does not exist" % opts.dpath) 
    if __name__ == "__main__": 
     main() 

appIDlist = [] 
for ids in os.listdir(path): 
     appid = "%s" % (ids).rstrip('.automaticDestinations-ms') 
     appIDlist.append(str(appid)) 

f = urllib2.urlopen("http://www.forensicswiki.org/wiki/List_of_Jump_List_IDs") 
s = f.read() 
soup = BeautifulSoup(''.join(s)) 
rows = soup.findAll('tr') 

appIDdictionary = dict()  #create an empty dictionary to allow lookups {'appID':'processName'} 
for tr in rows:     #iterate through every row in the table 
     cols = tr.findAll('td', limit=2)  #get the first two data chunks (<td>'s) 
     appID = str(cols[0]).rstrip('</td>').lstrip('<td>')  #clean up formatting 
     processName = str(cols[1]).rstrip('</td>').lstrip('<td>')  #clean up formatting 
     appIDdictionary[appID] = processName  #add the pair to the dictionary 

#iterate through list of appids pulled from windows user profile, look them up in the dictionary, and print the result 
for id in appIDlist: 
     if id in appIDdictionary: 
       print appIDdictionary[id]# + " is " + ids.rstrip('.automaticDestinations-ms') 
     else: 
       print 'Unable to find ' + id + ' in dictionary.' 
f.close() 
+0

Donc voici mon code final. Dites-moi où vous en pensez. – mrwh1t3

Répondre

0

Vous ne le transmettez probablement pas: vous devez appeler une fonction avec opts et accéder à opts.dpath ou myfunc(opts.dpath).

Peut-être. Votre code ne nous montre pas vraiment où est le problème.

MISE À JOUR:

ouais, vous voulez for ids in os.listdir(opts.dpath) autour de la ligne 30.

+0

Mise à jour de l'ensemble du corps du code ... – mrwh1t3

0

Voulez-vous dire path = opts.dpath?

Puis os.listdir(path) ...

+0

Mise à jour du corps entier du code ... – mrwh1t3

+0

Veuillez le formater correctement. Où finit la fonction 'main'? – jadkik94

+0

Il semble que opts est défini à l'intérieur de la fonction principale et le reste se passe à l'extérieur. Donc, soit l'ensemble opte une variable globale, soit le tout dans la fonction 'main'. – jadkik94

1

From the python docs:

parser.add_option("-f", "--file", dest="filename", 
        help="write report to FILE", metavar="FILE") 

Le paramètre dest est le nom de la variable que votre chemin est stockée à. Il est ensuite accédé en utilisant opts.filename.

+0

appIDlist = [] pour ids dans os.listdir (trajet): appid = "% s" % (ids) .rstrip (». AutomaticDestinations ms') appIDlist.append (str (appid)) – mrwh1t3

+0

Analyse du L'entrée de l'utilisateur dans opts.filename est un problème distinct de la capture à partir de la ligne de commande. Je ne vois pas vraiment où vous allez avec ces deux commentaires ... – JosefAssad

+0

Eh bien, je veux -d path_specified pour remplir les "ids dans os.listdir (chemin)". Spécifiquement la variable de chemin d'accès de sorte que l'utilisateur lors de l'exécution du programme peut spécifier leur propre chemin à chaque fois. Avoir du sens? – mrwh1t3