Jak uzyskać dostęp do argumentów wiersza poleceń dla aplikacji wiersza poleceń w Swift?
macos
command-line-arguments
swift
Anthony Mittaz
źródło
źródło
Odpowiedzi:
Firma Apple udostępniła
ArgumentParser
bibliotekę właśnie w tym celu:Swift Argument Parser
https://github.com/apple/swift-argument-parser
źródło
Aktualizacja 17.01.2017: Zaktualizowano nazwę przykładu Swift 3.
Process
naCommandLine
.Aktualizacja 30.09.2015: Zaktualizowano przykład, aby działał w Swift 2.
W rzeczywistości można to zrobić bez Foundation lub
C_ARGV
iC_ARGC
.Biblioteka standardowa Swift zawiera strukturę,
CommandLine
która ma kolekcjęString
plików nazwanycharguments
. Możesz więc włączyć takie argumenty:źródło
Process.arguments
taki sam jakNSProcessInfo.processInfo().arguments
?Process
obiekt jest teraz znany jakoCommandLine
obiekt. Prawdopodobnie zostanie to w pełni włączone po oficjalnym wydaniu Swift 3.0.W Swift 3 użyj
CommandLine
enum zamiastProcess
Więc:
źródło
Użyj stałych najwyższego poziomu
C_ARGC
iC_ARGV
.Zauważ, że używam zakresu od,
1..C_ARGC
ponieważ pierwszym elementemC_ARGV
„tablicy” jest ścieżka aplikacji.C_ARGV
Zmiennej rzeczywistości nie jest tablicą, ale jest sub-skrypty jak tablicy.źródło
C_ARCG
wydaje się, że nie jest już obsługiwany.Process.argc
iProcess.arguments
do tego, chociaż wygląda na to, że może się to zmienić naCommandLine.argc
iCommandLine.arguments
wraz z ostatnimi zmianami języka.Każdy, kto chce używać starego „getopt” (dostępnego w Swift), może użyć tego jako odniesienia. Zrobiłem port Swift przykładu GNU w C, który można znaleźć pod adresem:
http://www.gnu.org/software/libc/manual/html_node/Example-of-Getopt.html
z pełnym opisem. Jest przetestowany iw pełni funkcjonalny. Nie wymaga też Fundacji.
źródło
Możesz utworzyć parser argumentów za pomocą
CommandLine.arguments
Array i dodać dowolną logikę.Możesz to przetestować. Utwórz plik
arguments.swift
skompiluj i uruchom:
Problem z budowaniem własnego parsera argumentów polega na uwzględnieniu wszystkich konwencji argumentów wiersza poleceń. Poleciłbym użycie istniejącego parsera argumentów.
Możesz użyć:
Pisałem o tym, jak budować narzędzia wiersza poleceń na wszystkich trzech. Powinieneś je sprawdzić i zdecydować, jaki styl najbardziej Ci odpowiada.
Jeśli jesteś zainteresowany, oto linki:
źródło