Bagaimana jika kita ingin meneruskan informasi ke program Python kita untuk mengubah cara kerjanya?
Melewati argumen baris perintah
Saat Anda menjalankan program dari , Anda dapat meneruskan ke program tersebut
Di sini kami memiliki program yang disebut $ python3 greet.py Trey Hello world 3
Di sini kami memanggil program ini
$ python3 greet.py Hello world _
Argumen fungsi vs argumen baris perintah
Kata "argumen" adalah istilah yang dimuat
Di Python, kami memiliki argumen fungsi yang merupakan input ke suatu fungsi. Tapi argumen baris perintah adalah masukan untuk seluruh program
Jadi argumen fungsi dan argumen baris perintah tidak terlalu terkait, kecuali bahwa keduanya merupakan input ke dalam sesuatu
Python menerima argumen baris perintah apa pun yang kami berikan
Menurut Anda apa yang akan terjadi jika kita memberikan argumen ke program $ python3 greet.py Trey Hello world 3 kita, saat kita menjalankannya melalui Python?
Program $ python3 greet.py Trey Hello world _3 kami tidak menggunakan argumen baris perintah sama sekali. Itu hanya satu baris kode
Jadi apa tebakanmu?
Ketika kita menjalankan program $ python3 greet.py Trey Hello world 3 ini dengan argumen $ python3 greet.py Trey Hello world 9 kita melihat $ python3 greet.py Trey Hello world 6 dicetak
$ python3 greet.py Trey Hello world
Itu sedikit aneh
Python mengabaikan argumen apa pun yang kami berikan ke program ini. Python menyimpan semua argumen yang kita berikan, tetapi tidak melakukan apa pun dengan argumen tersebut. terserah kita (pelaksana program ini) untuk melakukan sesuatu dengan mereka
Di mana argumen baris perintah disimpan?
Python menyimpan argumen baris perintah di modul import sys print(sys.argv) print("Hello world") 1 di dalam daftar yang disebut
import sys print(sys.argv) print("Hello world")
Daftar import sys print(sys.argv) print("Hello world") _3 memiliki semua argumen yang diteruskan ke program Python kita
$ python3 greet.py Trey ['greet.py', 'Trey'] Hello world
Daftar import sys print(sys.argv) print("Hello world") _3 kami di sini memiliki dua hal di dalamnya, nama program kami dan argumen yang kami sampaikan
$ python3 greet.py Trey ['greet.py', 'Trey']
Hal pertama dalam import sys print(sys.argv) print("Hello world") _3 akan selalu menjadi nama program kita
Jika kami ingin mengambil argumen setelah nama program kami, kami dapat membaca item kedua (indeks import sys print(sys.argv) print("Hello world") 6) dari import sys print(sys.argv) print("Hello world") 3
import sys print("Hello", sys.argv[1])
Kami berasumsi bahwa kami mendapatkan argumen yang diteruskan dan kami mencetak argumen itu
$ python3 greet.py Trey Hello Trey $ python3 greet.py Carol Hello Carol
Jika saya memberikan lebih dari satu argumen, program kami saat ini mengabaikan semuanya setelah argumen pertama itu
$ python3 greet.py Trey Hunner Hello Trey
Bagaimana jika kita menyampaikan terlalu sedikit argumen?
$ python3 greet.py Traceback (most recent call last): File "/home/trey/greet.py", line 3, in print("Hello", sys.argv[1]) IndexError: list index out of range
Jika kita memberikan dua argumen, kita akan mendapatkan import sys print(sys.argv) print("Hello world") 8 (karena import sys print(sys.argv) print("Hello world") 3 tidak memiliki indeks import sys print(sys.argv) print("Hello world") 6 dalam kasus ini)
Memproses import sys print(sys.argv) print("Hello world") _3 secara manual adalah sesuatu yang seharusnya hanya Anda lakukan untuk program Python yang sangat sederhana. program yang tidak memerlukan pemrosesan argumen baris perintah yang rumit dan idealnya hanya melakukan ini untuk program yang hanya untuk Anda gunakan
Python menyediakan semua argumen baris perintah sebagai string
Mari kita lihat contoh lain. Di sini kami memiliki program yang disebut $ python3 greet.py Trey ['greet.py', 'Trey'] Hello world 2
import sys program, x, y = sys.argv print(x + y)
Program ini mengambil import sys print(sys.argv) print("Hello world") _3 dan membongkarnya menjadi tiga variabel. nama program, dan dua argumen apa pun yang diberikan setelah itu
Kemudian menambahkan argumen tersebut bersama-sama dan mencetaknya
Apa yang harus kita lihat ketika kita menjalankan $ python3 greet.py Trey ['greet.py', 'Trey'] Hello world 2 dengan $ python3 greet.py Trey ['greet.py', 'Trey'] Hello world 5 dan $ python3 greet.py Trey ['greet.py', 'Trey'] Hello world 6?
Coba tebak
6?
5?
100?
Inilah yang kami lihat saat kami menjalankan $ python3 greet.py Trey ['greet.py', 'Trey'] Hello world 2 dengan $ python3 greet.py Trey ['greet.py', 'Trey'] Hello world 5 dan $ python3 greet.py Trey ['greet.py', 'Trey'] Hello world 6
Aneh, bukan?
Jika kita $ python3 greet.py Trey ['greet.py', 'Trey'] 4 keluar import sys print(sys.argv) print("Hello world") 3
$ python3 greet.py Trey Hello world 0
Kita akan melihat bahwa itu adalah daftar string
$ python3 greet.py Trey Hello world _1
Python menyimpan semua argumen baris perintah sebagai string karena semua argumen baris perintah diberikan ke Python sebagai teks oleh sistem operasi. Python tidak melakukan pemrosesan apa pun dengan mereka;
Jadi jika kita ingin $ python3 greet.py Trey ['greet.py', 'Trey'] Hello world 5 dan $ python3 greet.py Trey ['greet.py', 'Trey'] Hello world 6 menjadi angka, kita harus mengonversinya sendiri menjadi angka
$ python3 greet.py Trey Hello world _2
Sekarang kita akhirnya melihat hasil yang kita harapkan
Argumen baris perintah disimpan dalam daftar import sys print(sys.argv) print("Hello world") 3
Jika Anda perlu membuat antarmuka baris perintah yang sangat sederhana (yang hanya untuk Anda) dan tidak perlu ramah, Anda dapat membaca import sys print(sys.argv) print("Hello world") 3 untuk memproses secara manual argumen yang masuk ke program Anda. Tetapi jika Anda membutuhkan sesuatu yang lebih kompleks, Anda mungkin harus menggunakan alat pemrosesan argumen baris perintah yang tepat (seperti modul import sys print("Hello", sys.argv[1]) 0 Python). Bagaimana jika kita ingin meneruskan informasi ke program Python kita untuk mengubah cara kerjanya?