Bagaimana Anda mengakses argumen baris perintah untuk aplikasi baris perintah di Swift?
macos
command-line-arguments
swift
Anthony Mittaz
sumber
sumber
Jawaban:
Apple telah merilis
ArgumentParser
perpustakaan untuk melakukan ini:Parser Argumen Cepat
https://github.com/apple/swift-argument-parser
sumber
Pembaruan 01/17/17: Memperbarui contoh untuk Swift 3.
Process
telah diubah namanya menjadiCommandLine
.Pembaruan 09/30/2015: Memperbarui contoh untuk bekerja di Swift 2.
Sebenarnya mungkin untuk melakukan ini tanpa Foundation atau
C_ARGV
danC_ARGC
.Pustaka standar Swift berisi struct
CommandLine
yang memiliki kumpulanString
s yang disebutarguments
. Jadi Anda bisa mengaktifkan argumen seperti ini:sumber
Process.arguments
sama denganNSProcessInfo.processInfo().arguments
?Process
objek sekarang dikenal sebagaiCommandLine
objek. Ini mungkin akan digabungkan sepenuhnya setelah Swift 3.0 secara resmi dirilis.Di Swift 3 gunakan
CommandLine
enum, bukanProcess
Begitu:
sumber
Gunakan konstanta tingkat atas
C_ARGC
danC_ARGV
.Perhatikan bahwa saya menggunakan kisaran
1..C_ARGC
karena elemen pertama dariC_ARGV
"array" adalah jalur aplikasi.The
C_ARGV
variabel tidak benar-benar sebuah array tetapi sub-skrip seperti array.sumber
C_ARCG
sepertinya tidak lagi didukung.Process.argc
danProcess.arguments
untuk ini, meskipun sepertinya ini mungkin berubah menjadiCommandLine.argc
danCommandLine.arguments
dengan perubahan terbaru pada bahasa.Siapapun yang ingin menggunakan "getopt" lama (yang tersedia di Swift) dapat menggunakan ini sebagai referensi. Saya membuat port Swift dari contoh GNU di C yang dapat ditemukan di:
http://www.gnu.org/software/libc/manual/html_node/Example-of-Getopt.html
dengan deskripsi lengkap. Sudah teruji dan berfungsi penuh. Itu juga tidak membutuhkan Foundation.
sumber
Anda bisa membuat pengurai argumen dengan menggunakan
CommandLine.arguments
Array dan menambahkan logika apa pun yang Anda suka.Anda bisa mengujinya. Buat file
arguments.swift
kompilasi dan jalankan:
Masalah dengan Anda membangun parser argumen Anda sendiri adalah dengan mempertimbangkan semua konvensi argumen baris perintah. Saya akan merekomendasikan menggunakan Argument Parser yang sudah ada.
Anda bisa menggunakan:
Saya telah menulis tentang bagaimana membangun alat baris perintah pada ketiganya. Anda harus memeriksanya dan memutuskan gaya apa yang paling cocok untuk Anda.
Jika Anda tertarik, berikut adalah tautannya:
sumber