Pythonでコマンドライン引数にアクセスするにはどうすればよいですか?


362

Pythonを使用してプロジェクト設定のセットアップを作成していますが、コマンドライン引数を取得するためのサポートが必要です。

私はこれをターミナルで試しました:

$python myfile.py var1 var2 var3

私のPythonファイルでは、入力されたすべての変数を使用したいと思います。


1
ベイカーモジュールは、Pythonコマンドラインアプリを作成するための優れたツールです。pypi.python.org/pypi/Baker/1.02
Spike Gronim

回答:



116
import sys

sys.argv[1:]

引数のリストが表示されます(Pythonファイルの名前は含まれません)


5
どういう[1:]意味ですか?
Kolobキャニオン

8
@KolobCanyonは、「インデックス1から最後までサブリストを取得する」、つまり最初の要素をスキップすることを意味します
Kamil Jarosz

@KolobCanyonの2番目の引数[1:]は、最初の引数がsys.argvデフォルトで、たとえば実行しているPythonファイルの名前であるためですtestrun.py
Samuel Nde

95

argparsePython 2.7以降に付属しているものを強くお勧めします。

argparseモジュールは、ボイラープレートコードを減らし、あなたのコードはより堅牢になり、モジュールは(サブコマンドを含む)すべての標準的なユースケースを処理するため、あなたのためのヘルプと使い方を生成し、チェックし、ユーザの入力サニタイズ-あなたはときを心配する必要はすべてのものをsys.argvアプローチを使用しています。そしてそれは無料です(組み込み)。

ここに小さな例があります:

import argparse

parser = argparse.ArgumentParser("simple_example")
parser.add_argument("counter", help="An integer will be increased by 1 and printed.", type=int)
args = parser.parse_args()
print(args.counter + 1)

と出力 python prog.py -h

usage: simple_example [-h] counter

positional arguments:
  counter     counter will be increased by 1 and printed.

optional arguments:
  -h, --help  show this help message and exit

そしてpython prog.py 1あなたが期待するように:

2

7
質の高い回答です。なぜここにいる誰もがここに記載されている他のアプローチを使用する理由はわかりません。特に組み込みなので!解析よりもやるべきことはありませんか?
Bassinator、2018

args名前空間の特定の引数にどのようにアクセスする必要があるかを言及するだけです:args.counter
MikeL

1
@Bassinator引数の解析が不要な場合。
活動の削減

コマンドラインで特定の値なしにデフォルト値を使用するには、次のようなものを使用できますparser.add_argument('var3', nargs='?', type=int, default=3)。var3はオプションのパラメーターです。コマンドラインで値を指定しない場合、コードでvar3にアクセスできます。var3のデフォルト値= 3
アルビコッコ

56

Pythonコード:

import sys

# main
param_1= sys.argv[1] 
param_2= sys.argv[2] 
param_3= sys.argv[3]  
print 'Params=', param_1, param_2, param_3

呼び出し:

$python myfile.py var1 var2 var3

出力:

Params= var1 var2 var3 

24

sys.argv引数をリストとして取得するために使用できます。

個々の要素にアクセスする必要がある場合は、

sys.argv[i]  

どこi指標である、0あなたに実行されているPythonのファイル名を与えます。その後のインデックスは、渡される引数です。


6

次のように呼び出すと、 $ python myfile.py var1 var2 var3

import sys

var1 = sys.argv[1]
var2 = sys.argv[2]
var3 = sys.argv[3]

sys.argv[0]常に現在の作業ディレクトリである配列も同様です。


6
sys.argv[0]は現在の作業ディレクトリではありません。実行中のファイルの名前です。
見た目

5

私が考えることができるいくつかの追加の事柄。

@allsyedが言ったように、sys.argvはコンポーネント(プログラム名を含む)のリストを提供するため、コマンドラインを介して渡される要素の数を知りたい場合は、len()を使用してそれを決定できます。これに基づいて、ユーザーが特定の数のパラメーターを渡さなかった場合の例外/エラーメッセージを設計できます。

また、コマンドライン引数を処理するより良い方法を探している場合は、https: //docs.python.org/2/howto/argparse.htmlを参照することをお勧めします

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.