Python - Script que recoja argumentos en GNU/Linux

 
Vista:
sin imagen de perfil

Script que recoja argumentos en GNU/Linux

Publicado por anonymous (4 intervenciones) el 19/09/2018 08:58:21
El código es para explicar lo que quiero hacer. Tengo un archivo.py en una carpeta del sistema que contiene el siguiente código, y quiero que se ejecute al llamarlo con un comando personalizado desde la terminal.

1
2
3
4
5
6
7
8
c = ['a', 'b', 'c']
 
 
var = input(str(''))
if var == "imprime":
    print(c)
else:
    pass

Para esto he creado un script y lo he puesto en la ruta </bin/> para que ejecute mi archivo.py desde la terminal con solo poner el nombre del script. Lo que necesito es que al colocar en la terminal
1
myscript imprime
me muestre la ejecución de el archivo.py que contiene el código que está al inicio, es decir, que devuelva:

['a', 'b', 'c']

Porque hasta ahora lo único que hace es ejecutar el archivo.py y quedarse a la espera del ingreso por teclado.

Muchas gracias desde ya.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de abZer0x
Val: 425
Bronce
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Script que recoja argumentos en GNU/Linux

Publicado por abZer0x (109 intervenciones) el 20/09/2018 00:01:35
Hola, puedes acceder a la propiedad argv del modulo sys la cual es una lista. El primer elemento es el nombre del script.

1
2
3
4
5
6
7
import sys
c = ['a', 'b', 'c']
try:
        if sys.argv[1].lower() == "imprime":
                print(c)
except IndexError:
        print('Debes pasar un argumento al script')

Ejemplo de ejecución
1
2
$ myscript imprime
$ ['a', 'b', 'c']
El valor imprime se guarda en la posición 1 de la lista.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil

Script que recoja argumentos en GNU/Linux

Publicado por anonymous (4 intervenciones) el 20/09/2018 00:53:18
Gracias, pero funciona solo si lo pongo en el script de ejecución, no en el archivo.py. EL script solo funcionará como lanzador para que se ejecute el archivo.py, que es quien contiene el código. Al colocar el código en el archivo.py por medio del script, no reconoce que se le pasó el argumento imprime. ¿Por qué pasa eso?


Archivo.py

1
2
3
4
5
6
7
8
9
10
11
12
13
import sys
 
c = ['a', 'b', 'c']
 
try:
 
        if sys.argv[1].lower() == "imprime":
 
                print(c)
 
except IndexError:
 
        print('Debes pasar un argumento al script')

myscript

1
2
3
 #!/usr/bin/python
 2 import os
 3 os.system("python ~/archivo.py")

Ejemplo de ejecucion:

1
2
myscript imprime
Debes pasar un argumento al script
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de abZer0x
Val: 425
Bronce
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Script que recoja argumentos en GNU/Linux

Publicado por abZer0x (109 intervenciones) el 20/09/2018 04:20:43
Debes ejecutar el script "archivo.py" pasando los argumentos algo así:

myscript
1
2
3
#!/usr/bin/python
import os, sys
os.system("python ~/archivo.py " + sys.argv[1])

Debes tener en cuenta que si no lo pasas el argumento lanzara la excepción IndexError, por lo que deberás capturarla como en archivo.py
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil

Script que recoja argumentos en GNU/Linux

Publicado por anonymous (4 intervenciones) el 20/09/2018 16:20:30
1
2
3
#!/usr/bin/python
import os, sys
os.system("python ~/archivo.py " + sys.argv[1])

Al hacer eso concatena la llamada al archivo.py con el argumento, lo que resulta:

1
2
$ python ~/archivo.pyimprime
$ (null): can't open file '/home/usuario/archivo.pyimprime': [Errno 2] No such file or directory

Y si lo hago

1
2
3
#!/usr/bin/python
import os, sys
os.system("python ~/archivo.py ", sys.argv[1])

Me manda este error:

1
2
3
4
Traceback (most recent call last):
  File "/usr/bin/myscript", line 3, in <module>
    os.system("python ~/archivo.py", sys.argv[1])
TypeError: system() takes at most 1 argument (2 given)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve
Val: 2.239
Plata
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Script que recoja argumentos en GNU/Linux

Publicado por xve (1646 intervenciones) el 20/09/2018 18:58:32
Hola Jonathan, es muy extraño que te lo junte, ya que hay un espacio entre archivo.py y las comillas...
1
os.system("python ~/archivo.py " + sys.argv[1])
Al haber ese espacio, no debería de juntartelo!!!

A mi me funciona correctamente!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Script que recoja argumentos en GNU/Linux

Publicado por anonymous (4 intervenciones) el 20/09/2018 21:33:15
Es cierto. Lo revisaré, tal vez se me ha pasado, ¡gracias! :D
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar