사용자 입력 및 명령 행 인수 [닫힘]


525

a) 사용자 입력을 받아 들일 수 있고 b) 명령 줄에서 실행할 경우 인수를 읽도록하는 Python 스크립트를 어떻게 갖습니까?


9
대답은 파이썬 버전에 따라 다릅니다. 파이썬 3.x를 조금 다르게 파이썬 2.7보다 이것을을 수행
steampowered

4
그리고 파이썬 2.7은 2.7 이전 버전, 예를 들면 다르게 이것을 비트를 수행 argparse하는 대신 optparse.
HelloGoodbye

답변:


501

사용자 입력을 읽으려면 사용자 로부터 텍스트 줄을 읽기위한 미니 명령 줄 인터프리터 (도움말 텍스트 및 자동 완성 포함) 및 ( Python 3+ 용)를 쉽게 만들 수 있는 cmd모듈 을 사용해 볼 수 있습니다 .raw_inputinput

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

명령 줄 입력은입니다 sys.argv. 스크립트에서 이것을 시도하십시오 :

import sys
print (sys.argv)

명령 행 옵션을 파싱하기위한 두 가지 모듈이 있습니다 : optparse(Python 2.7부터 사용되지 않으며 argparse대신 사용) 및 getopt. 스크립트에 파일을 입력하려면의 힘을 확인하십시오 fileinput.

파이썬 라이브러리 참조는 당신의 친구입니다.


71
raw_inputinputPython 3.x 로 이름이 바뀌 었습니다
-here


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

또는 파이썬 3의 경우 :

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

26
import 할 필요는 없으며 raw_input내장 함수입니다.
Dennis Golomazov

7
입력 된 모든 데이터는 기본적으로 str (ing) 유형 (숫자 포함)이므로 인쇄 연결에 str ()을 사용할 필요는 없습니다.
Goujon

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 ( "첫 번째 단어 나 구를 입력하십시오 :") 오류가 발생합니다. 역 추적 (가장 최근 호출) : return eval (raw_input (prompt)) File "<string> ", <module> NameError의 1 행 : name 'bad'가 정의되지 않았습니다.
IgorGanapolsky

input_var = input ( " 'E'를 누르고 'Enter'를 눌러 종료 :") NameError : name 'e'is not defined Python 2.5를 사용하고 있습니다. 어떻게이 오류를 극복 할 수 있습니까?
Deepak Dubey

당신은 파이썬 2.7과 함께 제공되는 다음 가져 오기를 사용하여 역 추적 통지를 방지 할 수 있습니다 :import fileinput result=[] for line in fileinput.input(): result.append(line)
스테판 Gruenwald

여기에 더 많은 역사와 근거가 있습니다 : python.org/dev/peps/pep-3111
Julian


18

input수행중인 작업을 모르는 경우 기능 을 사용하지 않도록주의하십시오 . 와 달리 raw_input, input파이썬 표현식을 받아 들일 것입니다.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 가 필요합니다. 합니다. doc은 설명에 따라 애플리케이션이 실행될 때 호출되는 명령 행 인수에 대한 인터페이스를 작성합니다.

그러나 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과 같지만 달리 정의하지 않는 한 문자열이됩니다.

따라서 다음과 같이 convert 명령을 사용할 수 있습니다.

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

3

파이썬 2에서 :

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

파이썬 3에서 :

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

2
import six

if six.PY2:
    input = raw_input

print(input("What's your name? "))
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.