ユーザー入力とコマンドライン引数[終了]


525

コマンドラインから実行した場合、a)ユーザー入力を受け入れることができるPythonスクリプトと、b)引数を読み込むようにする方法を教えてください。


9
答えは、Pythonのバージョンによって異なります。Pythonの3.xのは、少し違ったPythonの2.7よりもこれを行います
steampowered

4
また、Python 2.7 argparseでは、2.7の前のバージョンとは少し異なりoptparseます。
HelloGoodbye 2014年

回答:


501

ユーザー入力を読み取るには、cmdモジュールから簡単にミニコマンドラインインタープリターを作成し(ヘルプテキストとオートコンプリートを使用)、raw_inputinputPython 3以降の場合)ユーザーからテキスト行を読み取ります。

text = raw_input("prompt")  # Python 2
text = input("prompt")  # Python 3

コマンドライン入力はにありsys.argvます。スクリプトでこれを試してください:

import sys
print (sys.argv)

コマンドラインオプションを解析するための2つのモジュールがあります:optparse(Python 2.7以降非推奨、argparse代わりに使用)およびgetopt。スクリプトにファイルを入力するだけの場合は、の威力に注目してくださいfileinput

Pythonライブラリリファレンスはあなたの友達です。


71
raw_inputinputPython 3.xでに名前が変更されました- ドキュメントはこちら
Steampowered

1
これの私のお気に入りのソース:tutorialspoint.com/python/python_command_line_arguments.htmそしてこれも良さそうです:cyberciti.biz/faq/python-command-line-arguments-argv-example
Jordan Stewart

1
たとえば、パラメータを値として渡す場合、sys.argvには引数番号を指定する必要があります。python file_name.py 2017-02-10で日付を使用したい場合、sys.argv [1]である必要があります。それ以外の場合は、[file_name.py、2017-02-10]などのリストになります
Aravind Krishnakumar

467
var = raw_input("Please enter something: ")
print "you entered", var

またはPython 3の場合:

var = input("Please enter something: ")
print("You entered: " + var)

26
インポートする必要はないことに注意してくださいraw_input。これは組み込み関数です。
Dennis Golomazov 2014

7
入力されたすべてのデータはデフォルトで(偶数でも)str(ing)タイプになるため、印刷連結でstr()を使用する必要はありません。
グジョン

202

raw_inputPython 3.xでは使用できなくなりました。しかし、raw_input名前が変更されたinputため、同じ機能が存在します。

input_var = input("Enter something: ")
print ("you entered " + input_var) 

変更の文書化


24
Python 2.7では、input()は値を文字列に変換しません。したがって、これを実行しようとすると、input_variable1 = input( "Enter the first word orphrase:")、you get a error:Traceback(most latest call last):return eval(raw_input(prompt))File "<string> "、1行目<モジュール>でNameError:名前 'bad'は定義されていません
IgorGanapolsky

input_var = input( "Press 'E' and 'Enter' to exit:")NameError:name 'e' is not defined私はPython 2.5を使用しています。どうすれば、このエラーを克服できます。
Deepak Dubey 2013年

あなたは、Python 2.7が付属して、次のインポートを使用してトレースバック通知を避けることができます:import fileinput result=[] for line in fileinput.input(): result.append(line)
ステファン・グリューンワルト

歴史と理論的根拠は次のとおり
Julian


18

input何をしているのかわからない場合は、関数を使用しないように注意してください。とは異なりraw_inputinput任意のpython式を受け入れるため、それはちょっとみたいですeval


15

この単純なプログラムは、コマンドラインからユーザー入力をフィードする方法を理解し、無効な引数を渡すヘルプを表示するのに役立ちます。

import argparse
import sys

try:
     parser = argparse.ArgumentParser()
     parser.add_argument("square", help="display a square of a given number",
                type=int)
    args = parser.parse_args()

    #print the square of user input from cmd line.
    print args.square**2

    #print all the sys argument passed from cmd line including the program name.
    print sys.argv

    #print the second argument passed from cmd line; Note it starts from ZERO
    print sys.argv[1]
except:
    e = sys.exc_info()[0]
    print e

1)5の平方根を見つける

C:\Users\Desktop>python -i emp.py 5
25
['emp.py', '5']
5

2)数値以外の無効な引数を渡す

C:\Users\bgh37516\Desktop>python -i emp.py five
usage: emp.py [-h] square
emp.py: error: argument square: invalid int value: 'five'
<type 'exceptions.SystemExit'>

10

コンソール/ターミナルからの入力には、 'raw_input'を使用します。

ファイル名などのコマンドライン引数が必要な場合

$ python my_prog.py file_name.txt

次に、sys.argvを使用できます...

import sys
print sys.argv

sys.argvはリストで、0はプログラム名であるため、上記の例ではsys.argv [1]は「file_name.txt」になります。

コマンドラインオプションをすべて使用したい場合は、optparseモジュールを使用してください。

ペブ


9

Python <2.7を実行している場合は、optparseが必要です。これは、ドキュメントで説明されているように、アプリケーションの実行時に呼び出されるコマンドライン引数へのインターフェイスを作成します。

ただし、Python≥2.7では、optparseは非推奨になり、上記のようにargparseに置き換えられました。ドキュメントからの簡単な例...

次のコードは、整数のリストを受け取り、合計または最大値を生成するPythonプログラムです。

import argparse

parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument('integers', metavar='N', type=int, nargs='+',
                   help='an integer for the accumulator')
parser.add_argument('--sum', dest='accumulate', action='store_const',
                   const=sum, default=max,
                   help='sum the integers (default: find the max)')

args = parser.parse_args()
print args.accumulate(args.integers)


6

3.xバージョンの場合は、次のように使用します。

variantname = input()

たとえば、8を入力するとします。

x = input()
8

xは8になりますが、特に定義しない限り、文字列になります。

したがって、次のように変換コマンドを使用できます。

a = int(x) * 1.1343
print(round(a, 2)) # '9.07'
9.07

3

Python 2の場合:

data = raw_input('Enter something: ')
print data

Python 3の場合:

data = input('Enter something: ')
print(data)

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