¿Cómo se accede a los argumentos de la línea de comandos para una aplicación de línea de comandos en Swift?
macos
command-line-arguments
swift
Anthony Mittaz
fuente
fuente
Respuestas:
Apple ha lanzado la
ArgumentParser
biblioteca para hacer precisamente esto:Analizador de argumentos veloz
https://github.com/apple/swift-argument-parser
fuente
Actualización 17/01/17: Se actualizó el ejemplo de Swift 3.
Process
ha cambiado de nombreCommandLine
.Actualización 30/09/2015: Se actualizó el ejemplo para que funcione en Swift 2.
De hecho, es posible hacer esto sin Foundation o
C_ARGV
yC_ARGC
.La biblioteca estándar de Swift contiene una estructura
CommandLine
que tiene una colección deString
s llamadosarguments
. Entonces podrías activar argumentos como este:fuente
Process.arguments
lo mismo queNSProcessInfo.processInfo().arguments
?Process
objeto ahora se conoce como elCommandLine
objeto. Esto probablemente se incorporará por completo una vez que Swift 3.0 se lance oficialmente.En Swift 3 use
CommandLine
enum en lugar deProcess
Entonces:
fuente
Utilice las constantes de nivel superior
C_ARGC
yC_ARGV
.Tenga en cuenta que estoy usando el rango de
1..C_ARGC
porque el primer elemento de laC_ARGV
"matriz" es la ruta de la aplicación.La
C_ARGV
variable no es en realidad una matriz, sino que es sub-programable como una matriz.fuente
C_ARCG
parece que ya no se admite.Process.argc
yProcess.arguments
para esto, aunque parece que esto podría estar cambiando paraCommandLine.argc
yCommandLine.arguments
con los cambios más recientes a la lengua.Cualquiera que quiera usar el antiguo "getopt" (que está disponible en Swift) puede usarlo como referencia. Hice un puerto Swift del ejemplo de GNU en C que se puede encontrar en:
http://www.gnu.org/software/libc/manual/html_node/Example-of-Getopt.html
con una descripción completa. Está probado y es completamente funcional. Tampoco requiere Fundación.
fuente
Puede crear un analizador de argumentos utilizando
CommandLine.arguments
Array y agregar la lógica que desee.Puedes probarlo. Crea un archivo
arguments.swift
compílelo y ejecútelo:
El problema con la construcción de su propio analizador de argumentos es tener en cuenta todas las convenciones de argumentos de la línea de comandos. Recomendaría usar un analizador de argumentos existente.
Podrías usar:
He escrito sobre cómo construir herramientas de línea de comandos en los tres. Deberías echarles un vistazo y decidir qué estilo te queda mejor.
Si está interesado aquí están los enlaces:
fuente