Saya saat ini sedang belajar sendiri Python dan hanya ingin tahu (mengacu pada contoh saya di bawah) dalam istilah yang disederhanakan apa yang sys.argv[1]
diwakilinya. Apakah itu hanya meminta input?
#!/usr/bin/python3.1
# import modules used here -- sys is a very standard one
import sys
# Gather our code in a main() function
def main():
print ('Hello there', sys.argv[1])
# Command line args are in sys.argv[1], sys.argv[2] ..
# sys.argv[0] is the script name itself and can be ignored
# Standard boilerplate to call the main() function to begin
# the program.
if __name__ == '__main__':
main()
Jawaban:
Saya ingin mencatat bahwa jawaban sebelumnya membuat banyak asumsi tentang pengetahuan pengguna. Jawaban ini mencoba menjawab pertanyaan di tingkat tutorial yang lebih.
Untuk setiap permintaan Python,
sys.argv
secara otomatis daftar string yang mewakili argumen (dipisahkan oleh spasi) pada baris perintah. Nama ini berasal dari konvensi pemrograman C di mana argv dan argc mewakili argumen baris perintah.Anda akan ingin mempelajari lebih lanjut tentang daftar dan string saat Anda membiasakan diri dengan Python, tetapi sementara itu, berikut adalah beberapa hal yang perlu diketahui.
Anda cukup membuat skrip yang mencetak argumen saat direpresentasikan. Ini juga mencetak jumlah argumen, menggunakan
len
fungsi pada daftar.Script membutuhkan Python 2.6 atau yang lebih baru. Jika Anda memanggil skrip ini
print_args.py
, Anda dapat menjalankannya dengan berbagai argumen untuk melihat apa yang terjadi.Seperti yang Anda lihat, argumen baris perintah menyertakan nama skrip tetapi bukan nama juru bahasa. Dalam pengertian ini, Python memperlakukan skrip sebagai executable. Jika Anda perlu tahu nama yang dapat dieksekusi (python dalam kasus ini), Anda dapat menggunakan
sys.executable
.Anda dapat melihat dari contoh-contoh bahwa dimungkinkan untuk menerima argumen yang berisi spasi jika pengguna memanggil skrip dengan argumen yang di-enkapsulasi dalam tanda kutip, jadi yang Anda dapatkan adalah daftar argumen yang disediakan oleh pengguna.
Sekarang dalam kode Python Anda, Anda dapat menggunakan daftar string ini sebagai input untuk program Anda. Karena daftar diindeks oleh bilangan bulat berbasis nol, Anda bisa mendapatkan masing-masing item menggunakan sintaksis daftar [0]. Misalnya, untuk mendapatkan nama skrip:
Meski menarik, Anda jarang perlu tahu nama skrip Anda. Untuk mendapatkan argumen pertama setelah skrip untuk nama file, Anda bisa melakukan hal berikut:
Ini adalah penggunaan yang sangat umum, tetapi perhatikan bahwa itu akan gagal dengan IndexError jika tidak ada argumen yang diberikan.
Selain itu, Python memungkinkan Anda referensi sepotong daftar, jadi untuk mendapatkan daftar lain hanya argumen yang disediakan pengguna (tetapi tanpa nama skrip), Anda dapat melakukan
Selain itu, Python memungkinkan Anda untuk menetapkan urutan item (termasuk daftar) ke nama variabel. Jadi jika Anda mengharapkan pengguna untuk selalu menyediakan dua argumen, Anda dapat menetapkan argumen tersebut (sebagai string) ke dua variabel:
Jadi, untuk menjawab pertanyaan spesifik Anda,
sys.argv[1]
sajikan argumen baris perintah pertama (sebagai astring
) yang disediakan untuk skrip yang dimaksud. Ini tidak akan meminta input, tetapi akan gagal dengan IndexError jika tidak ada argumen yang disediakan pada baris perintah mengikuti nama skrip.sumber
sys.argv
, saya bertanya-tanya apa yang dilakukan garisfrom __future__ import print_function
. Apakah ini sesuatu yang harus saya tambahkan jika saya TIDAK menjalankan Python 3 tetapi Python 2? @Jason R. Coombssys.argv **is** automatically a list of strings
. Apakah maksud Anda "memberi" atau "kembali"?argv
atributsys
modul adalah referensi ke objek daftar yang berisi string argumen. Untuk menggunakangives
ataureturns
menyarankan pemanggilan fungsi atau generator atau konstruksi lain.references
ataurepresents
mungkin istilah yang lebih tepat, tetapiis
cukup dekat.main
dengan mengimpor modul (misalkan nama modulnyamoduleA.py
) dan memanggil fungsi seperti padaimport moduleA; moduleA.main()
. Dalam hal ini, tidak ada argumen baris perintah .. jadisys.argv[0]
masih harus mewakilifilename
ie. itu harus dicetakmoduleA.py
?sys.argv [1] berisi argumen baris perintah pertama yang diteruskan ke skrip Anda.
Misalnya, jika skrip Anda dinamai
hello.py
dan Anda menerbitkan:atau:
Script Anda akan dicetak:
sumber
sys.argv
adalah daftar.Daftar ini dibuat oleh baris perintah Anda, ini daftar argumen baris perintah Anda.
Sebagai contoh:
di baris perintah Anda, Anda memasukkan sesuatu seperti ini,
sys.argv
akan menjadi daftar ['file.py', 'something']Pada kasus ini
sys.argv[1] = 'something'
sumber
Cukup tambahkan jawaban Frederic, misalnya jika Anda memanggil skrip Anda sebagai berikut:
./myscript.py foo bar
sys.argv[0]
akan menjadi "./myscript.py"sys.argv[1]
akan menjadi "foo" dansys.argv[2]
akan menjadi "bar" ... dan sebagainya.Dalam kode contoh Anda, jika Anda memanggil skrip sebagai berikut
./myscript.py foo
, output skrip akan menjadi "Hello there foo".sumber
Menambahkan beberapa poin lagi ke Jason's Answer:
Untuk mengambil semua argumen yang disediakan pengguna:
user_args = sys.argv[1:]
Pertimbangkan sys.argv sebagai daftar string sebagai (disebutkan oleh Jason). Jadi semua manipulasi daftar akan berlaku di sini. Ini disebut "Daftar Mengiris". Untuk info lebih lanjut, kunjungi di sini .
Sintaksnya seperti ini: list [start: end: step]. Jika Anda menghilangkan mulai, itu akan menjadi default ke 0, dan jika Anda menghilangkan akhir, itu akan default ke panjang daftar.
Misalkan Anda hanya ingin mengambil semua argumen setelah argumen ke-3, maka:
Misalkan Anda hanya menginginkan dua argumen pertama, maka:
Misalkan Anda ingin argumen 2 hingga 4:
Misalkan Anda menginginkan argumen terakhir (argumen terakhir selalu -1, jadi yang terjadi di sini adalah kita mulai menghitung dari belakang. Jadi, mulai adalah yang terakhir, tanpa akhir, tanpa langkah):
Misalkan Anda ingin argumen terakhir kedua:
Misalkan Anda ingin dua argumen terakhir:
Misalkan Anda ingin dua argumen terakhir. Di sini, mulai adalah -2, yaitu item terakhir kedua dan kemudian ke akhir (dilambangkan dengan ":"):
Misalkan Anda menginginkan segalanya kecuali dua argumen terakhir. Di sini, mulai adalah 0 (secara default), dan akhir adalah item terakhir kedua:
Misalkan Anda ingin argumen dalam urutan terbalik:
Semoga ini membantu.
sumber
sys.argv adalah daftar yang berisi jalur skrip dan argumen baris perintah; yaitu sys.argv [0] adalah jalur skrip yang Anda jalankan dan semua anggota berikut adalah argumen.
sumber
Untuk meneruskan argumen ke skrip python Anda saat menjalankan skrip melalui baris perintah
di sini, nama skrip - create_thumbnail.py, argumen 1 - test1.jpg, argumen 2 - test2.jpg
Dengan skrip create_thumbnail.py saya gunakan
yang memberi saya daftar argumen yang saya sampaikan di baris perintah sebagai ['test1.jpg', 'test2.jpg']
sumber
sys.argv
adalah atribut darisys
modul. Dikatakan argumen dilewatkan ke file di baris perintah.sys.argv[0]
menangkap direktori tempat file tersebut berada.sys.argv[1]
mengembalikan argumen pertama yang dilewatkan di baris perintah. Pikirkan seperti kami memiliki file example.py.example.py
Sekarang di sini di command prompt ketika kita melakukan ini:
Ini akan melempar kesalahan indeks pada baris 2. Karena tidak ada argumen yang dilewati. Anda bisa melihat panjang argumen yang dilewati oleh pengguna menggunakan
if len(sys.argv) >= 1: # Code
. Jika kita menjalankan example.py dengan memberikan argumenMencetak:
Karena itu argumen pertama! Katakanlah kita telah membuatnya menjadi file yang dapat dieksekusi menggunakan PyInstaller. Kami akan melakukan ini:
Mencetak:
Ini sangat membantu ketika Anda membuat perintah di terminal. Pertama periksa panjang argumen. Jika tidak ada argumen yang lolos, lakukan teks bantuan.
sumber
sys .argv akan menampilkan args baris perintah yang dilewati saat menjalankan skrip atau Anda dapat mengatakan sys.argv akan menyimpan argumen baris perintah yang dilewatkan dalam python saat menjalankan dari terminal.
Coba ini:
argv menyimpan semua argumen yang disahkan dalam daftar python. Di atas akan mencetak semua argumen yang lulus akan menjalankan skrip.
Sekarang coba ini jalankan filename.py Anda seperti ini:
ini akan mencetak 3 argumen dalam daftar.
Demikian pula, argv 1 adalah argumen pertama yang disahkan, dalam hal ini 'contoh'
Pertanyaan serupa telah diajukan di sini, btw. Semoga ini membantu!
sumber