Kullanıcı girişi ve komut satırı bağımsız değişkenleri [kapalı]


525

A) kullanıcı girişini kabul edebilecek bir Python betiğim var ve b) komut satırından çalıştırıldığında bağımsız değişkenlerde okumayı nasıl sağlayabilirim?


9
Cevap Python sürümünüze bağlı olacaktır. Python 3.x bunu Python 2.7'den biraz farklı yapıyor
12'de

4
Ve Python 2.7 de 2.7 önce sürümlerinde, örneğin farklı bu biraz yapar argparseyerine optparse.
14:56

Yanıtlar:


501

Kullanıcı girişini okumak için cmdmodülü kolayca bir mini komut satırı yorumlayıcısı (yardım metinleri ve otomatik tamamlama ile) oluşturmak ve raw_input( inputPython 3+ için) kullanıcıdan bir metin satırı okumak için deneyebilirsiniz .

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

Komut satırı girişleri sys.argv. Senaryonuzda deneyin:

import sys
print (sys.argv)

Komut satırı seçeneklerini ayrıştırmak için iki modül vardır: optparse(Python 2.7'den beri kullanımdan kaldırılmıştır, argparsebunun yerine kullanın) ve getopt. Betiğinize yalnızca dosya girmek istiyorsanız, gücüne bakın fileinput.

Python kütüphanesi referans arkadaşın.


71
raw_inputinputPython 3.x olarak yeniden adlandırıldı - burada dokümantasyon
steampowered


1
Bir parametreyi değer olarak ilettiğinizi varsayalım, sys.argv değişken numarasıyla sağlanmalıdır. python file_name.py 2017-02-10 ve tarihi kullanmak istiyorsanız, sys.argv [1] olmalıdır, aksi takdirde [file_name.py, 2017-02-10] gibi bir liste olacaktır.
Aravind Krishnakumar

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

Veya Python 3 için:

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

26
İçe aktarmanız gerekmediğine dikkat edilmelidir raw_input, bu yerleşik bir işlevdir.
Dennis Golomazov

7
Girilen tüm veriler varsayılan olarak str (ing) türünde olacağından baskı birleştirmesinde str () kullanmanıza gerek yoktur.
Goujon

202

raw_inputartık Python 3.x'te mevcut değil. Ancak raw_inputyeniden adlandırıldı input, bu yüzden aynı işlevsellik var.

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

Değişikliğin dokümantasyonu


24
Python 2.7'de input () değerleri dizelere dönüştürmez. Yani bunu yapmaya çalışırsanız: input_variable1 = input ("İlk kelimeyi veya kelime öbeğini girin:"), bir hata alırsınız: Traceback (en son çağrı son): return eval (raw_input (istemi)) Dosya "<string> ", satır 1, <modül> NameError: 'kötü' adı tanımlanmadı
IgorGanapolsky

input_var = input ("Çıkmak için" E "ve" Enter "tuşlarına basın:") NameError: 'e' adı tanımlanmadı Python 2.5 kullanıyorum. Nasıl, bu hatayı aşabilirim.
Deepak Dubey

Python 2.7 ile birlikte gelen aşağıdaki içe aktarma özelliğini kullanarak Geri Bildirim bildiriminden kaçınabilirsiniz:import fileinput result=[] for line in fileinput.input(): result.append(line)
Stefan Gruenwald

İşte tarihin ve mantığın daha fazlası: python.org/dev/peps/pep-3111
Julian


18

inputNe yaptığınızı bilmiyorsanız , işlevi kullanmamaya dikkat edin . Aksine raw_input, inputherhangi bir python ifadesini kabul edecek, bu yüzden gibieval


15

Bu basit program, kullanıcı girişini komut satırından nasıl besleyeceğinizi ve geçersiz argümanı geçirme konusunda yardım göstermenize yardımcı olur.

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'in karekökünü bulmak

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

2) Sayı dışında geçersiz argüman iletme

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

Bir konsoldan / terminalden giriş için 'raw_input' komutunu kullanın.

sadece bir dosya adı veya benzeri bir komut satırı argümanı istiyorsanız

$ python my_prog.py file_name.txt

o zaman sys.argv kullanabilirsiniz ...

import sys
print sys.argv

sys.argv, 0'ın program adı olduğu bir listedir, bu nedenle yukarıdaki örnekte sys.argv [1] "dosya_adı.txt" olur

Komut satırında tam seçeneklere sahip olmak istiyorsanız, optparse modülünü kullanın.

PEV


9

Python <2.7 çalıştırıyorsanız , doc açıkladığı gibi uygulamanız çalıştırıldığında çağrılan komut satırı argümanlarına bir arayüz oluşturacak olan optparse'a ihtiyacınız vardır.

Bununla birlikte, Python ≥2.7'de optparse kullanımdan kaldırılmıştır ve yukarıda gösterildiği gibi argparse ile değiştirilmiştir . Dokümanlardan kısa bir örnek ...

Aşağıdaki kod, tamsayıların listesini alan ve toplamı veya maks'i üreten bir Python programıdır:

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 sürümü ise, sadece şunu kullanın:

variantname = input()

Örneğin, 8 girmek istiyorsunuz:

x = input()
8

x, 8'e eşit olacaktır, ancak başka türlü tanımlamanız dışında bir dize olacaktır.

Convert komutunu kullanabilirsiniz, örneğin:

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

3

Python 2'de:

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

Python 3'te:

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.