it-swarm-id.com

Input pengguna dan argumen baris perintah

Bagaimana cara saya memiliki skrip Python yang a) dapat menerima input pengguna dan bagaimana cara membuatnya b) membaca argumen jika dijalankan dari baris perintah?

465
Teifion

Untuk membaca input pengguna Anda dapat mencoba modul cmd untuk dengan mudah membuat penerjemah baris perintah mini (dengan teks bantuan dan pelengkapan otomatis) dan raw_input ( input untuk Python 3+) untuk membaca baris teks dari pengguna.

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

Input baris perintah ada di sys.argv. Coba ini di skrip Anda:

import sys
print (sys.argv)

Ada dua modul untuk opsi baris perintah parsing:  optparse (usang sejak Python 2.7, gunakan argparse sebagai gantinya) dan getopt . Jika Anda hanya ingin memasukkan file ke skrip Anda, lihat kekuatan fileinput .

Referensi pustaka Python adalah teman Anda.

416
Antti Rasinen
var = raw_input("Please enter something: ")
print "you entered", var

Atau untuk Python 3:

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

raw_input tidak lagi tersedia dalam Python 3.x. Tetapi raw_input diubah namanya menjadi input, sehingga fungsionalitas yang sama ada.

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

Dokumentasi perubahan

201
steampowered

Cara terbaik untuk memproses argumen baris perintah adalah modul argparse.

Gunakan raw_input() untuk mendapatkan input pengguna. Jika Anda mengimpor readline module pengguna Anda akan memiliki pengeditan baris dan riwayat.

31
Dave Webb

Berhati-hatilah untuk tidak menggunakan fungsi input, kecuali Anda tahu apa yang Anda lakukan. Tidak seperti raw_input, input akan menerima ekspresi python, jadi agak seperti eval

18
Vhaerun

Program sederhana ini membantu Anda dalam memahami cara memberi makan input pengguna dari baris perintah dan untuk menunjukkan bantuan saat melewati argumen yang tidak valid.

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) Untuk menemukan akar kuadrat dari 5

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

2) Melewati argumen yang tidak valid selain dari angka

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'>
13
Viswesn

Gunakan 'raw_input' untuk input dari konsol/terminal.

jika Anda hanya ingin argumen baris perintah seperti nama file atau sesuatu mis.

$ python my_prog.py file_name.txt

maka Anda dapat menggunakan sys.argv ...

import sys
print sys.argv

sys.argv adalah daftar di mana 0 adalah nama program, jadi dalam contoh di atas sys.argv [1] adalah "file_name.txt"

Jika Anda ingin memiliki opsi baris perintah penuh, gunakan modul optparse.

Pev

10
Simon Peverett

Jika Anda menjalankan Python <2.7, Anda memerlukan optparse , yang seperti dijelaskan oleh doc akan membuat antarmuka ke argumen baris perintah yang dipanggil saat aplikasi Anda dijalankan.

Namun, dalam Python ≥2.7, optparse telah ditinggalkan, dan diganti dengan argparse seperti yang ditunjukkan di atas. Contoh cepat dari dokumen ...

Kode berikut adalah program Python yang mengambil daftar bilangan bulat dan menghasilkan jumlah atau maks:

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)
9
Matt Olan

Jika ini versi 3.x maka cukup gunakan:

variantname = input()

Misalnya, Anda ingin memasukkan 8:

x = input()
8

x akan sama dengan 8 tetapi itu akan menjadi string kecuali jika Anda mendefinisikannya sebaliknya.

Jadi Anda dapat menggunakan perintah convert, seperti:

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

Sebagai Python 3.2 2.7, sekarang ada argparse untuk memproses argumen baris perintah.

6
GreenMatt

Dengan Python 2:

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

Dengan Python 3:

data = input('Enter something: ')
print(data)
2
Mark
import six

if six.PY2:
    input = raw_input

print(input("What's your name? "))
1
Will Charlton