1

以下のスニペットは「奇妙な」出力を生成しています。

for s in servers:
    vo = ss.getServerVO(s)
    values = []
    for f in voFields:
        attribValue = getattr(vo, f)
        values.append(attribValue)
    customValues = ss.getCustomFields(s)
    for f in customFields:
        values.append(customValues[f])
    # Convert all values to string before writing
    values = map(str, values)
    csvFile.writerow( values )

辞書の一部の(すべてではない)アイテムについてcustomFields、次の出力が得られます。

<bound method ServerVO.getCreatedDate of <pytwist.com.opsware.server.ServerVO instance at 0x3da8680>>

valuesバインドされたメソッドを実行してその結果を辞書に入れるには、何をする必要がありますか?

(特定のコンテキストは、HP Server Automation APIに対してPyTwistスクリプトを作成することです)


Linuxでswfupload.jsを機能させるための回避策はありますか?

SWFUploadはubuntuでは機能しません。インターネット全体でさまざまな言及を見ることができますが、ここで回避策を見つけた人はいないでしょうか。

私はWindowsで開発しているので、コードは正常に実行されます。しかし、私の同僚はubuntuを実行しており、SWFUploadはすぐにクラッシュします。誰かがそれに遭遇し、回避策を見つけましたか?進行状況などの既知の問題を引き起こしているが効果がないことをコメントアウトするなど、いくつかのことを試しました。

助けていただければ幸いです。

デイブ。

4

1 に答える 1

1

バインドされたメソッドが 1 つである場合は、そのメソッドを呼び出してみてください。

for f, v in customFields.iteritems():
  try:
    v = v()
  except TypeError:
    pass
  values.append(v)

もちろん、問題は、「アクセサー」を他の種類の値と混合するという設計上の選択 (HP または誰によるもの) にあります。アクセサーは適切な Pythonic の選択ではなく、プロパティに置き換える必要があります (この「呼び出し」が自動化される場合)。必要に応じて)。この提案は、その悪い設計選択を回避する可能な方法に関するものです。

値が呼び出し可能でない (または引数なしで呼び出し可能でない) 場合に発生する可能性のある TypeError を呼び出すだけで、特別なメソッドを使用callableまたはチェックするよりも優れています。__call__大丈夫です。したがって、Python ではいつものように、「許可によって許しを求めるほうがよい」: 操作を試行する前に、操作が許可されているかどうかを確認しようとする (「許可を求める」) よりも、操作を試して、起こりうるエラーをキャッチする (「許しを求める」) ことをお勧めします。 )。

于 2010-03-05T18:42:07.497 に答える