🐍
sys.orig_argvとsys.argvの違い
sys.orig_argvとsys.argvの違い
Pythonのコマンドライン引数周りについて調べていると、sys.orig_argv
という見慣れない属性を見つけました。
公式ドキュメントの説明を見ても、どんなユースケースが想定されていて、sys.argv
との違いはなにか、なぜ3.10になって新しく追加されたのか気になったので調べてみました。
sys.orig_argv
公式ドキュメントには以下のようにありました。(2022-09-29時点)
つまり、sys.orig_argv
とは、Python executableに渡されるオリジナルのコマンドライン引数リストとのことです。
sys.orig_argv
The list of the original command line arguments passed to the Python executable.See also sys.argv.
なるほど。わからなかったのでもう少し詳細に調べてみました。
python -c
で使ったPythonパスが取得できない問題
すると、以下のIssueを発見しました。
-c
オプションをつけてpython
コマンドを実行すると、sys.argv
で実行されたpythonインタプリタが取得できないというものでした。
sys.orig_argv
はこの問題に対処するためのものみたいです。
試してみる
Issueの中にあったサンプルを実際に、試してみました。
sys.argv
python -c "import sys; print(sys.argv)" "arg1"
['-c', 'arg1']
sys.orig_argv
python -c "import sys; print(sys.orig_argv)" "arg1"
['/path/to/python/3.10.7/bin/python', '-c', 'import sys; print(sys.orig_argv)', 'arg1']
確かに、sys.argv
では取れなかったpythonのパスがsys.orig_argv
では取れていますね。
まとめ
- 基本的に、今まで通り
sys.argv
を使うで問題ない -
sys.argv
とsys.orig_argv
の違いは、実行されたpythonのパスを含むかどうか - どのpythonで実行されたかどうかも含めて、情報を取りたいときは
sys.orig_argv
を使う
参考
Discussion