2016-07-28 12 views
0

私は以下のコードのようなものの保守担当者ではないというpythonファイルを持っています。 if __name__の下にすべてを置くコードを修正することなく、別のモジュールからこれをインポートする方法があるので、プログラムを実行して引数をプログラムで渡すことができますか?別のPythonモジュールから__main__を実行するにはどうしたらいいですか?

import configargparse 

if __name__ == '__main__': 
    args = get_args() 
    #more code to execute... 
+0

間違いなく重複、ありがとう。それを読んだ後、それは答えが不可能であるように見えます。 – John

+0

いいえ、モジュールが 'if __name__ == '__main __''を使って 'main()'関数を呼び出さない限り、残念なことにそれを行うことはできません。 – Aurora0001

答えて

1

ほとんどの場合、あなたはできません。そのコードは有用な方法で公開されていません。ソースファイルを変更できる場合は、そのコードをすべてif __name__ == '__main__'ブロックから移動し、main()関数に代入するのが一般的な解決方法です。

それはhereを説明するよう可能は、ソートのあなたがやりたいexecfile機能を使用するのですが、これはいくつかの理由で醜いソリューションです(import文は、唯一の副作用のために使用されてますので、それをファイル化するために不正行為をして使用すると、モジュールレベルの変数はおそらくmodule.varとして参照されるときに期待通りに動作しません。そのページのコメントのいくつかで説明されています)。

この例でも、引数を渡すのに便利な方法があるかどうかは不明です。私はあなたがsys.argvを明示的に設定することができたと思うが、これはすでに匂いがどのようにハッピーであるかを見て...

+0

私はコマンドシェルを起動することでそれを動作させていますが、私のものではないコードに触れることなく、より洗練されたソリューションを望んでいました。しかし、ありがとう。 – John

関連する問題