2016-03-20 20 views
-1

Dies ist der Teil des Codes:Typeerror: nicht genügend Argumente für Formatstring - Python

print("User would be added sudo access") 
    comment = raw_input("Enter comment for sudo entry ") 
    group_name = raw_input("Enter sudo group name ") 

    edit_verdad = "vd edit -u '+module.sudo.alias.'%s' = '%s'' \ 
        -u '+module.sudo.ent.'%s'.cmd = ALL' \ 
        -u '+module.sudo.ent.'%s'.comment = '%s'' \ 
        -u '+module.sudo.ent.'%s'.host = ALL' \ 
        -u '+module.sudo.ent.'%s'.passwd = 0' \ 
        -u '+module.sudo.ent.'%s'.user = '%s'' \ 
        '%s'" %(group_name, options.username, group_name, comment, group_name, group_name, group_name, group_name, options.hostname) 
    print(edit_verdad) 

Variable options.hostname und options.username haben die richtigen Werte von opt Parse.

, wenn ich das Skript ausführen bekomme ich so etwas wie:

[loclhost]$ ./add_sudo_access.py -u rocky -n somehostname.xxx.yyy.com 
User would be added sudo access 
Enter comment for sudo entry ticket 123 
Enter sudo group name sudoadm 
Traceback (most recent call last): 
    File "./add_sudo_access.py", line 50, in <module> 
    '%s'" %(group_name, options.username, group_name, comment, group_name, group_name, group_name, group_name, options.hostname) 

Irgendwelche Ideen?

+1

Ich schlage vor, dass Sie sorgfältigere Zählungen machen, wie oft "% s" in der Zeichenkette erscheint und wie viele Variablen Sie in diese Zeichenkette interpolieren. – TigerhawkT3

Antwort

0

Sie haben 10 Argumente im Format, aber Sie haben 9 Werte in Tupel übergeben.

Bitte versuchen Sie diese

edit_verdad = "vd edit -u '+module.sudo.alias.'%s' = '%s'' \ 
        -u '+module.sudo.ent.'%s'.cmd = ALL' \ 
        -u '+module.sudo.ent.'%s'.comment = '%s'' \ 
        -u '+module.sudo.ent.'%s'.host = ALL' \ 
        -u '+module.sudo.ent.'%s'.passwd = 0' \ 
        -u '+module.sudo.ent.'%s'.user = '%s'' \ 
        '%s'" %(group_name, options.username, group_name, comment, group_name, group_name, group_name, group_name, options.hostname, "LAST VARS") 

Jetzt haben Sie 10 Argumente für 10 %s.

Sie können LAST VARS durch Ihren Wert ersetzen. Oder entfernen Sie 1 %s aus Ihrer Zeichenfolge.

+1

Das funktioniert. Danke vielmals! – supervirus

0

Wenn Sie die Anzahl von '% s' in Ihrer Zeichenfolge sorgfältig zählen, erhalten Sie die Nummer 10. Leider in %(..) Liste haben Sie nur 9 Elemente. Entweder haben Sie eine zusätzliche %s oder Sie verpassen einen Wert in %(..) Liste.

+0

Sie haben Recht. Danke vielmals. – supervirus

Verwandte Themen