Önceki cevapların, kullanıcının bilgisi hakkında birçok varsayımda bulunduğunu belirtmek isterim. Bu cevap, soruyu daha öğretici bir seviyede cevaplamaya çalışır.
Her Python çağrısı sys.argviçin, komut satırında otomatik olarak argümanları (boşluklarla ayrılmış olarak) temsil eden dizelerin bir listesidir. Ad, argv ve argc'nin komut satırı argümanlarını temsil ettiği C programlama kuralından gelir .
Python'a alıştıkça listeler ve dizeler hakkında daha fazla şey öğrenmek isteyeceksiniz, ancak bu arada bilmeniz gereken birkaç şey var.
Bağımsız değişkenleri temsil edildiği gibi yazdıran bir komut dosyası oluşturabilirsiniz. Ayrıca lenlistedeki işlevi kullanarak argüman sayısını da yazdırır .
from __future__ import print_function
import sys
print(sys.argv, len(sys.argv))
Komut dosyası, Python 2.6 veya üstünü gerektirir. Bu betiği çağırırsanız print_args.py, ne olacağını görmek için onu farklı argümanlarla çağırabilirsiniz.
> python print_args.py
['print_args.py'] 1
> python print_args.py foo and bar
['print_args.py', 'foo', 'and', 'bar'] 4
> python print_args.py "foo and bar"
['print_args.py', 'foo and bar'] 2
> python print_args.py "foo and bar" and baz
['print_args.py', 'foo and bar', 'and', 'baz'] 4
Gördüğünüz gibi, komut satırı argümanları komut dosyası adını içerir ancak yorumlayıcı adını içermez. Bu anlamda Python, komut dosyasını çalıştırılabilir olarak ele alır . Çalıştırılabilir dosyanın adını bilmeniz gerekiyorsa (bu durumda python) kullanabilirsiniz sys.executable.
Örneklerden, kullanıcı betiği tırnak içine alınmış bağımsız değişkenlerle çalıştırırsa, boşluk içeren bağımsız değişkenleri almanın mümkün olduğunu görebilirsiniz, bu nedenle elde ettiğiniz, kullanıcı tarafından sağlanan bağımsız değişkenlerin listesidir.
Şimdi Python kodunuzda, bu dizeler listesini programınıza girdi olarak kullanabilirsiniz. Listeler sıfır tabanlı tamsayılarla indekslendiğinden, liste [0] sözdizimini kullanarak tek tek öğeleri alabilirsiniz. Örneğin, komut dosyası adını almak için:
script_name = sys.argv[0]
İlginç olsa da, nadiren senaryo adınızı bilmeniz gerekir. Bir dosya adı için komut dosyasından sonraki ilk bağımsız değişkeni almak için aşağıdakileri yapabilirsiniz:
filename = sys.argv[1]
Bu çok yaygın bir kullanımdır, ancak hiçbir bağımsız değişken sağlanmadıysa bir IndexError ile başarısız olacağını unutmayın.
Ayrıca Python, bir listenin bir dilimine başvurmanıza izin verir, böylece yalnızca kullanıcı tarafından sağlanan bağımsız değişkenlerin (ancak komut dosyası adı olmadan) başka bir listesini elde etmek için şunları yapabilirsiniz:
user_args = sys.argv[1:]
Ek olarak, Python değişken adlarına bir dizi öğe (listeler dahil) atamanıza izin verir. Dolayısıyla, kullanıcının her zaman iki bağımsız değişken sağlamasını bekliyorsanız, bu bağımsız değişkenleri (dizeler olarak) iki değişkene atayabilirsiniz:
user_args = sys.argv[1:]
fun, games = user_args
Bu nedenle, özel sorunuzu yanıtlamak için, söz konusu komut dosyasına sağlanan sys.argv[1]ilk komut satırı bağımsız değişkenini (a olarak string) temsil eder . Girdi sormaz, ancak komut satırında komut satırından sonra hiçbir argüman sağlanmadıysa IndexError ile başarısız olur.