2011-01-04 1 views
0

初心者のPythonで、おそらく私は正しい質問をしていませんが、渡された引数をPythonの文字列にキャストするにはどうすればよいですか? sys.argvからキャストを文字列に渡しました

#!/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

「長いエラー」より具体的なことができますか? 'str(arg)'はargを文字列に変換する正しい方法です。 – nmichaels

+0

申し訳ありませんがエラーを投稿していない、それは長いと私はすべての実際のスクリプトの名前などを取って時間を過ごすことを望んでいませんでした...しかし、あなたの努力のおかげで –

答えて

9

値はすでに文字列である。ここでは

は私がしようとしているものです。私は問題はあなたがスクリプト名であるsys.argv [0]を渡していることだと思います。これを試してください:

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

母は、ありがとう! –

+0

ええと1つの質問、forループでは、スクリプト名はまったく表示されず、idだけです。しかし、これはPHPから来る私には意味があります。これは、その言語でも起こります。もう一度おねがいします –

+0

@Phill Pafford: '[1:]'はスライスの構文です。最初のものを除くすべての要素を含む新しいリストが表示されます。次に、新しいリストを反復処理します。 –

1

sys.argvのargsはすでに文字列である必要があります。あなたはそれを文字列にキャストする必要があると思いますか?

あなたはおそらくエラーを投稿するべきではないと思いますか?

とにかく、とにかくあなたはそれをどうにかしています。 argvの最初の引数はスクリプトの名前です。おそらく、あなただけの()SETIDに渡された正確に何を参照してループ内でprint文を入れている必要があり、また

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

たい。

+0

私の例では、forループでargsを出力したことを示していますが、スクリプト名が最初のインデックスにあるようです。 –

+0

例外がスローされた後、argsを大量に印刷しています。あなたはループの最初のものとしてそれを置くべきです。 – Falmarri

0

整数が必要なように見えます。各argが渡されると、はすでにという文字列になっているので、実行中にそれをキャストする理由はありません。代わりにint(arg)を試してください。

+0

申し訳ありませんが、私がコメントした例を見ると、テストされて動作している文字列を渡していることがわかります。努力をありがとう –

+0

全く問題はありません。 –

関連する問題