1

1 つのメイン *.py ファイル (「main_file.py」と呼びましょう) でいくつかの python スクリプト (k2_fig1 - k2_fig3) を実行するコマンド ライン ツールを構築しています。この「main_file.py」では、ユーザーはデータベース接続用のいくつかのパラメーター (ユーザー名、データベース名など)を入力
する必要があります。これらのパラメーターを、インポートするすべての python-script に渡す方法がわかりません。これらのインポートされたファイルには何をコーディングする必要がありますか?
これは「main_file.py」の私のコードです:

import argparse
def main():
  parser = argparse.ArgumentParser()

  parser.add_argument('-D', '--database', action="store", type=str, dest="my_dbname",  required=True, help="DB name")

  parser.add_argument('-U', '--username', action="store", type=str, dest="my_username", required=True, help="DB username")

  args = parser.parse_args()


  # Import different scripts
  import k2_fig1
  import k2_fig2
  import k2_fig3

if __name__ == '__main__':
  main()
4

2 に答える 2

0

名前空間の属性を「config」モジュールにコピーするのが最善の方法だと思います::

import argparse

from . import config
from . import other

def update_obj(dst, src):
    for key, value in src.items():
        setattr(dst, key, value)

def main():
    parser = argparse.ArgumentParser()
    parser.add_argument('-D', '--database')
    parser.add_argument('-U', '--username')

    args = parser.parse_args('-D foo'.split())

    update_obj(config, args)

そして「他のモジュール」::

from . import config

def some_func():
    assert config.database == 'foo'
于 2013-01-19T17:38:39.767 に答える
0

k2fig_1 などについて他に何も知らなくても、それらをsubprocessインポートするのではなく、使用して呼び出す必要があります。

import argparse
import subprocess

def main():
  parser = argparse.ArgumentParser()
  parser.add_argument('-D', '--database', action="store", type=str, dest="my_dbname",  required=True, help="DB name")
  parser.add_argument('-U', '--username', action="store", type=str, dest="my_username", required=True, help="DB username")

  args = parser.parse_args()
  for script in ['k2_fig1', 'k2_fig2', 'k2_fig3']:
      subprocess.call([script, '-U', args.my_username, '-D', args.my_dbname])

if __name__ == '__main__':
  main()
于 2013-01-19T15:25:28.673 に答える