¿Dónde comenzar a crear aplicaciones CLI? [cerrado]

8

Después de usar Linux durante un mes o dos, sé lo que estoy haciendo ahora.

Al crear programas, usando cualquier idioma, obviamente he estado usando un código como este:

$ python test.py

Y si quisiera test.pyleer un archivo dado, tendría que usar:

$ python test.py something.file

Lo que me gustaría hacer ahora es intentar crear una aplicación de línea de comandos para poder usar

$ myapp something.file

Un programa como el pythonin $ python test.pyo el nanoin$ nano program.pl

¿Pero dónde diablos empiezo a construir aplicaciones como estas? Un poco de búsqueda en la web no me ha llevado a ningún lado.

Si puedes decirme eso sería genial, pero aceptaré fácilmente un montón de enlaces.

Estoy totalmente abierto si hay más de una forma, realmente no me importa qué idioma (¡una excusa para aprender otra!) O lo que sea.

ACarter
fuente
3
¿Desea aprender la programación de Unix C o simplemente quiere poder ejecutar sus scripts de Python sin tener que especificar la pythonparte?
jw013
@ jw013 Quiero aprender programación Unix C. (Aunque me interesaría saber cómo podría ejecutar scripts de Python sin el python.)
ACarter
44
Probablemente debería solucionar su pregunta entonces :) Las aplicaciones CLI se pueden escribir en cualquier lenguaje que tenga un compilador o intérprete de Unix, por lo que si solo está interesado en C, dígalo. La programación de Unix C es en realidad dos partes: la parte de Unix y la parte de C. Como es, "¿Cómo aprendo la programación de Unix C?" probablemente se cerrará por ser demasiado general, y probablemente haya duplicados en todo este sitio. "Cómo aprendo programación en C" también es demasiado general y posiblemente fuera de tema. Ciertamente se cerraría en SO.
jw013
@ jw013 Lo que realmente busco son consejos como "Las aplicaciones CLI se pueden escribir en cualquier idioma que tenga un compilador o intérprete de Unix", así que gracias.
ACarter
1
Ah ok Siempre hay un pequeño tramo inicial en la curva de aprendizaje al intentar ingresar al entorno Unix, pero una vez que lo superes, estoy seguro de que verás que el esfuerzo valió la pena. Desafortunadamente, no conozco ningún recurso al que pueda señalar para comenzar: básicamente, debe recoger pedazos a medida que
avanza

Respuestas:

15

Puede ejecutar scripts de python haciéndolos ejecutables ( chmod +x test.py) y creando #!/usr/bin/env pythonla primera línea. Una vez que hagas eso, ejecutar test.py argsinvocará a python para ejecutar tu script. Lea sobre shebang si desea obtener más información.

jw013
fuente
Eso no funcionó para mí. $ test.py 30dio un error de fiesta: -bash: test.py: command not found. ¡Gracias por tu ayuda hasta ahora!
ACarter
8
@ACarter Eso es porque no está en tu $PATH. Utilice una ruta, como /path/to/test.pyo ./test.pysi /path/toya está, o agregue /path/toa su $PATH. Hay muchas preguntas duplicadas en este sitio sobre este último.
jw013
Tan pronto como coloque algo en su $PATH, omita las terminaciones de archivos como .py.
Reactormonk
Necesita la #!/usr/bin/env pythonparte superior de su script antes de poder eliminar la extensión .py. Pero cualquier script que contenga esta invocación o alguna similar (por ejemplo, #!/bin/shpara scripts de shell) se puede nombrar sin una extensión. No tiene nada que ver con si está en tu RUTA o no.
Michael Hampton
2
Para ser claros, las extensiones no importan en el mundo de Unix, a diferencia de Windows. donde las extensiones gustan .EXEy son .COMimportantes. Sin embargo, la razón detrás de la eliminación de la extensión es que los ejecutables genéricos deberían ser simplemente ejecutables genéricos. El significado de esta tautología es que los usuarios solo quieren la funcionalidad y no deberían necesitar saber o preocuparse si es Perl o Python o sh o bash o awk, etc., ese es un detalle de implementación mayormente irrelevante. Y, hacer que un script sea ejecutable y agregar un shebang lo convierte en un ejecutable genérico.
jw013
2

En C, se ve así:

int main(int argc, char *argv[]) {

El argumento es el número de argumentos. Tenga en cuenta que el nombre del programa / herramienta cuenta.

Los argumentos mismos terminan en el vector de argumento (o matriz), argv.

Luego está la parte difícil de escribir código para tratar con ellos de la manera prevista.

Luego compila con gcc. Usted especifica el nombre del programa con la -obandera (outfile). Ejecute el archivo desde su directorio actual de esta manera: ./tool_name input_file_1 ... input_file_n(o póngalo en un directorio que aparece cuando escribe echo $PATH, luego puede invocarlo desde cualquier lugar, es decir, sin el punto).

Emanuel Berg
fuente
1

Yo uso Go. Es un lenguaje compilado, multiplataforma, con la facilidad de programación de un lenguaje dinámico y soporte para concurrencia y comunicación.

No voy a volver a Python ya que es muy divertido desarrollarlo con Go.

http://golang.org/
https://github.com/languages/Go

Aquí tiene un programa simple que obtiene los argumentos utilizados en ese comando:

package main

import (
  "fmt"
  "flag"
)

func main() {
  fmt.Println("Arguments: ", flag.Args())
}

http://play.golang.org/p/1dpUT11-cc

Bagazo
fuente
Go es ideal para algunos casos de uso específicos; sin embargo, comparar Go y Python para servicios generales es como comparar un cuchillo de caza (Go) con una navaja suiza (Python)
Mike Pennington
1
Go es un lenguaje de propósito general, que se está utilizando, es decir, en Youtube, en aplicaciones web o para construir juegos (hay un juego terminado y otros en desarrollo). Además de ser utilizado en aplicaciones CLI.
Marc
55
Solo quiere saber cómo hacer un programa ejecutable; realmente no necesitamos entrar en una guerra de idiomas
Michael Mrozek