1

メインと異なる入力引数(私は を使用)の両方を持つ2つのPythonスクリプトAとがあります。通常は次のように起動します。Bargparse

$ python A.py --paramA1 valA1 --paramA2 valA2
$ python B.py --paramB1 valB1 --paramB2 valB2

B内部から呼び出して、起動時にパラメータAを指定できるようにしたいです。要するに、のパラメータと のパラメータで呼び出したいのです。外から見ると次のようになります。BAAAB

$ python A.py --paramA1 valA1 --paramA2 valA2 --paramB1 valB1 --paramB2 valB2

Bargparseコードをコピーして貼り付けてAから呼び出すよりもエレガントな方法はありBますか?

編集:物事を簡単にするために、ここにいくつかのサンプルコードがあります:

A.py:

import argparse
def main():
    parser = argparse.ArgumentParser(description="Args for A.py")
    parser.add_argument("--param1A", type=int)
    parser.add_argument("--param2A", type=int)
    args = parser.parse_args()
    valA1 = args.param1A
    valA2 = args.param2A
    ...
    return 0

B.py:

import argparse
def main():
    parser = argparse.ArgumentParser(description="Args for B.py")
    parser.add_argument("--param1B", type=int)
    parser.add_argument("--param2B", type=int)
    args = parser.parse_args()
    valA1 = args.param1B
    valA2 = args.param2B
    ...
    return 0

C.pyの両方の引数を含む、提案された は正確にはどのようなものでしょうか? そして、その時、どのように見えますか?A.pyB.pyA.pyB.py

編集 2:B.pyのパラメーターの 1 つをで作成する必要があることを忘れていたA.pyので、実行順序は であり、Aにパラメーターを渡すことができる必要があります。BAB

4

2 に答える 2

2

C.py共通のロジックを含み、argparseA と B の両方によってインポートされるモジュールを作成できます。

A から B を呼び出す場合、既に解析された引数を B に渡すこともできます。mainつまり、A と B の両方に、既に解析された引数を取る関数のようなものが必要なので、解析を 2 回行う必要はありません。

C.py

import argparse

def create_parser():
    parser = argparse.ArgumentParser(description="Args for B.py")
    parser.add_argument("--param1B", type=int)
    parser.add_argument("--param2B", type=int)
    return parser

B.py

import argparse
import sys
import C

def main(args):
    valB1 = args.param1B
    valB2 = args.param2B
    # do stuff
    return 0

if __name__ == '__main__':
    parser = C.create_parser()
    args = parser.parse_args()
    sys.exit(main(args))

A.py

import argparse
import sys
import C
import B

def main(args):
    valA1 = args.param1A
    valA2 = args.param2A
    # do stuff
    return 0


if __name__ == '__main__':
    parser = C.create_parser()
    parser.add_argument("--param1A", type=int)
    parser.add_argument("--param2A", type=int)
    args = parser.parse_args()
    B.main(args)
    sys.exit(main(args))
于 2013-04-08T09:47:20.630 に答える