0

私の手の届かないところにある簡単な解決策を持つ、非常に簡単な問題のように思える問題があります。

私のセットアップ:

A) ドライバ ファイル (テスト スクリプトを実行) B) 接続ファイル (リクエストを使用) C) パラメータ ファイル

パラメータ ファイルには、サーバー IP、ログイン、パスなどの 6 つの変数があります。

Driver ファイルには、プロパティ ファイルを読み取って空白を埋める praser があります。

driver.py パラメータファイル.csv

これはうまくいきます。ただし、B) 接続ファイルで確認する必要があるパラメーター ファイルに PORT 変数を追加しました。この接続ファイルは、明示的に呼び出されることはなく、接続および Cookie メソッド用にドライバー ファイルにインポートされるだけです。

解析された変数 (sys.argv から) を paramtersfile.csv から Connections ファイル (またはスクリプトの実行に使用されるその他のファイル) に引き継ぐにはどうすればよいですか?

スタックオーバーフロー コミュニティに感謝します

編集:

必要なモジュール/ファイルのクラス (self.foo) に引数を渡す明白な方法を使用して、動作するようにしました。

以前からの私の質問は、このアイデアの線に沿っていました:

あなたは次のようなことをします

loadproperties(プロパティファイル)

次に、他のpythonスクリプトから実行できます

プロパティローダーのインポート

不変プロパティのリストを現在のスペースにロードします

するだけでとても便利そうです

url = プロパティローダー.url

それ以外の

クラス接続 (ホスト、ポート、パス、url ):

自己。url = url

ローダー = リクエスト (セキュア、URL )

何とか何とか何とか...

スクリプトの異なる部分間で共通のパラメータを共有するための頭痛のない方法のようです。

多分まだこれを行う方法があります(追加のクレジットの質問)

4

1 に答える 1

0

driver.py ファイルから接続ファイルをモジュールとしてインポートし、解析した引数をモジュール内のメソッドに渡します。このようなもの:

#===inside driver.py===
import connections

params = parseFile(sys.argv) #get parameters from the csv file that is passed to the command line
connections.connect(params)  #pass them to whatever method you need to call from connections

編集:モジュール方式でコードを記述していないようです。コードをファイルの観点から考えるのをやめて、代わりにモジュールの観点から考えるべきです。つまり、さまざまな場所で使用できる交換可能なコードの断片です。私が見た設計の主な欠陥 (正しく理解できなかった場合はご容赦ください) は、接続オブジェクトの作成に使用する接続ファイル内に値をハードコーディングしていることです。これはあなたのコードがどのように見えるかを推測しています(または少なくともコードの精神を適切に捉えています):

#connections.py
MY_SERVER = ??? #WHAT DO I SET THIS TO?

class Connection:
    def __init__(self):
        self.server = MY_SERVER

def connect():
    connection = Connection() #create a new connection object

MY_SERVERそもそも定義すべきではない変数を定義しているため、上記のコードは適切に設計されていません! 接続クラスは、どのサーバーを使用する必要があるかを認識したり気にしたりしません。どのサーバーでも動作するはずです。では、サーバー変数はどこで取得しますか? コンストラクターまたはメソッドを介して渡します。次のようなことができます。

#connections.py
class Connection:
    def __init__(self, server):
        self.server = server

def connect(server):
    connection = Connection(server) #create a new connection object with the server passed to the method

この設計により、Connection オブジェクトはより柔軟になります。基本的には、「私はどのサーバーでも扱える接続オブジェクトです。私を使いたい場合は、どのサーバーを使いたいか教えてください!」ということです。

このように、ドライバー ファイルで、最初に csv からサーバーを解析し、connections.connect必要なサーバーを渡してメソッドを呼び出すだけです。

于 2013-08-26T19:08:56.340 に答える