2016-07-27 7 views
0

私が最近知ったのは私が驚いたことですが、入力時に明示的に呼び出されたファイル以外のファイルでコマンドライン引数を呼び出すことができます。Pythonのさまざまなファイルからのコマンドライン引数の使用

コマンドラインでpython file1.py abcを実行し、sys.argv [1]を使用してfile2.pyまたはfile3.pyから文字列 'abc'を取得できます。

私はまだこれはうまくいかないと感じていますが、私はそれが私に多くの問題を救ったので、うれしいです。

しかし、今私は本当になぜ/どのようにこの作品がうまく答えていただきたいと思います。私はsys.argv [1]が各ファイルに対してローカルであると仮定していました。

+1

あなたは何を意味するのか分かりません... sys.argvには、プログラムが起動されたときにコマンドライン引数が含まれています...そして、そのグローバルに利用可能なもの... –

答えて

2

how/whyについては、sysは一度だけインポートされます(python起動時)。 sysをインポートすると、argvのメンバーにコマンドライン引数が設定されます。その後のimportステートメントは同じsysモジュールオブジェクトを返すので、どこのimport sysからでも、常に同じオブジェクトが得られるため、sys.argvはアプリケーションで参照する場所に関係なく常に同じリストになります。あなたは複数の場所でコマンドライン構文解析をやっているかどうか


は別の質問です。一般的に、私の答えは、あなたが次の2または3日間働くスクリプトを一緒にハッキングしない限り、 "いいえ"になります。あなたが最後に期待しているものはすべて、それが前に(おそらく​​のような堅牢な引数パーサを使って)解析し、さまざまな関数/クラスに必要なデータをそのエントリポイントから渡すべきです。

+0

インポートの仕組みを誤解しているようです。知っておいてよかった!ありがとう! これは一時的なハックではありませんが、デバッグのために内部でのみ使用されます。それでも、あなたが提案するように、私はargparseを試してみるつもりです。私はまた、特定のcmd行argsにフラグを使用させることができます。これは、私が考えなかった有用な機能になります。 –

関連する問題