Python'daki komut satırı bağımsız değişkenlerine nasıl erişirim?


362

Proje ayarları kurulumumu oluşturmak için python kullanıyorum, ancak komut satırı bağımsız değişkenlerini almak için yardıma ihtiyacım var.

Bunu terminalde denedim:

$python myfile.py var1 var2 var3

Python dosyamda girdi olan tüm değişkenleri kullanmak istiyorum.


1
Fırıncı modülü Python komut satırı uygulamaları yazmak için harika bir araçtır. pypi.python.org/pypi/Baker/1.02
Spike Gronim

Yanıtlar:



118
import sys

sys.argv[1:]

size argümanların bir listesini verecektir (python dosyasının adını içermez)


5
Ne anlama [1:]geliyor?
Kolob Kanyonu

8
@KolobCanyon "endeks 1'den sonuna kadar bir alt liste al" anlamına gelir, yani ilk öğeyi atla
Kamil Jarosz

@KolobCanyon ikinci bağımsız değişkeni [1:]yukarı doğru alır çünkü ilk argümanı sys.argvvarsayılan olarak örneğin çalıştırdığınız python dosyasının adıdır testrun.py.
Samuel Nde

95

argparseHangi Python 2.7 ve üstü ile geliyor tavsiye ederim .

argparseModül kazan plaka kodunu azaltır ve kod daha sağlam hale getirir, modül (alt komutlarının dahil) tüm standart kullanım durumları işlemesi nedeniyle, sizin için yardım ve kullanımı oluşturur, çekler ve kullanıcı girişi sterilize - Eğer sizi ilgili endişe gereken tek şey şeyler sys.argvyaklaşımı kullanıyor . Ve ücretsiz (yerleşik).

İşte küçük bir örnek:

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)

ve çıktı 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

ve python prog.py 1beklediğiniz gibi:

2

7
Kalite cevabı, burada kimsenin neden burada verilen diğer yaklaşımlardan herhangi birini kullanacağından emin değilim. Özellikle inşa edildiği için! Ayrıştırmaktan daha iyi yapacak işleriniz yok mu?
Baslayıcı

Args ad alanındaki belirli bağımsız değişkene nasıl erişmeniz gerektiğinden bahsetmek için: args.counter
MikeL

1
@Bassinator Bağımsız değişkenlerin ayrıştırılmasına gerek olmadığı durumlarda.
etkinliği azaltma

varsayılan değeri kullanmak için, komut satırında belirli bir değer olmadan, parser.add_argument('var3', nargs='?', type=int, default=3)şöyle bir şey kullanabilirsiniz: var3 isteğe bağlı bir parametredir, komut satırında bir değer belirtmezseniz kodunuzdaki var3'e, var3 için varsayılan değere erişebilirsiniz = 3
Albicocco

56

Python kodu:

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

çağırma:

$python myfile.py var1 var2 var3

Çıktı:

Params= var1 var2 var3 

24

sys.argvBağımsız değişkenleri liste olarak almak için kullanabilirsiniz .

Tek tek öğelere erişmeniz gerekiyorsa,

sys.argv[i]  

iendeks nerede , 0yürütülmekte olan python dosya adını verecektir. Bundan sonraki herhangi bir dizin, iletilen argümanlardır.


6

Eğer böyle çağırırsan: $ python myfile.py var1 var2 var3

import sys

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

sys.argv[0]Her zaman geçerli çalışma dizini olan dizilere benzer .


6
sys.argv[0]geçerli çalışma dizini değil. Yürütülen dosyanın adıdır.
görünüm

5

Düşünebileceğim bazı ek şeyler.

@Allsyed'in dediği gibi sys.argv bileşenlerin bir listesini verir (program adı dahil), bu nedenle komut satırından geçen öğelerin sayısını bilmek istiyorsanız, bunu belirlemek için len () kullanabilirsiniz. Buna dayanarak, kullanıcı belirli sayıda parametre geçmediyse istisna / hata mesajları tasarlayabilirsiniz.

Ayrıca komut satırı argümanlarını ele almanın daha iyi bir yolunu arıyorsanız, https://docs.python.org/2/howto/argparse.html adresine bakmanızı öneririm.

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.