2011-01-04 4 views
0

Newbie bei Python und vielleicht ich nicht die Frage richtig, aber wie gieße ich einen übergebenen arg String in Python?Cast übergeben arg zu string

Hier ist, was ich versuche:

#!/usr/bin/python 
# Python Wrapper to Call XMLRPC service 

import xmlrpclib 
import sys 

# Set the Server 
servAddr = "http://127.0.0.1/xmlrpc.server.php" 

# Start the Client 
client = xmlrpclib.ServerProxy(servAddr) 

for arg in sys.argv: 
    id = str(arg) 
    print client.service.setId(id) # Throws long error 
    # print client.service.setId('123') # Hard coded works 
    #print arg # prints the id passed 
+1

Können Sie genauer als "lange Fehler" sein? 'str (arg)' ist die korrekte Art, arg in eine Zeichenkette zu verwandeln. – nmichaels

+0

Entschuldigung, dass ich den Fehler nicht gepostet habe, es ist lang und ich wollte nicht die Zeit damit verbringen, den echten Skriptnamen herauszunehmen, etc ... Danke für Ihre Bemühungen, obwohl –

Antwort

9

Die Werte von sys.argv bereits sind Strings. Ich denke, das Problem ist, dass Sie sys.argv [0] übergeben, was der Name des Skripts ist. Versuchen Sie folgendes:

for arg in sys.argv[1:]: 
    print client.service.setId(arg) 
+0

Haha das funktioniert, Danke! –

+0

hmm eine Frage, in der for-Schleife wird der Skriptname überhaupt nicht gedruckt, nur die ID. Aber das macht für mich Sinn, wenn ich von PHP komme, da dies auch in dieser Sprache passiert. Nochmals vielen Dank –

+0

@Phill Pafford: Die '[1:]' ist die Syntax für das Schneiden. Es gibt Ihnen eine neue Liste mit allen Elementen außer der ersten. Dann iterieren Sie über die neue Liste. –

1

Ihre Argumente in sys.argv sollten bereits Strings sein. Was lässt Sie denken, dass Sie eine Saite spielen müssen?

Glauben Sie nicht, dass Sie den Fehler wahrscheinlich posten sollten?

Aber wie auch immer, du machst es sowieso falsch. Das erste Argument von argv ist der Name des Skripts. Sie wollen wahrscheinlich

for arg in sys.argv[1:]: 
    id = str(arg) 
    print client.service.setId(id) 

Außerdem sollten Sie nur eine print-Anweisung in der Schleife gesetzt haben, genau zu sehen, was zu setId weitergegeben wurde().

+0

In meinem Beispiel zeige ich, dass ich die Argumente in einer for-Schleife ausgedruckt habe, scheint nur der Name des Skripts ist im Index zuerst. –

+0

Sie drucken die Argumente sehr oft nach dem Auslösen einer Ausnahme aus. Du solltest es als erstes in deine Schleife aufnehmen. – Falmarri

0

Es sieht so aus, als ob Sie eine ganze Zahl wünschen. Jede , die in bereits eine Zeichenfolge übergeben wird, so würde es keinen Grund geben, es zu werfen, wie Sie es tun. Versuchen Sie stattdessen int(arg).

+0

Tut mir leid, wenn Sie sich meine auskommentierten Beispiele ansehen, werden Sie sehen, dass ich eine Zeichenfolge übergebe, die getestet wurde und funktioniert. Danke für die Bemühungen –

+0

Kein Problem. –