Underc0de

Foros Generales => Dudas y pedidos generales => Mensaje iniciado por: Electrónico en Enero 17, 2016, 06:58:26 AM

Título: [SOLUCIONADO] No me da por bueno esta línea de texto [PYTHON]
Publicado por: Electrónico en Enero 17, 2016, 06:58:26 AM
Buenas a tod@s:

Estoy haciendo una API en python para instalar un servicio de mail para poder enviar correos electrónicos desde la línea de comandos.

Cuando lanzo el programa, primero quiero comprobar si el programa está instalado y si no lo está pues se instale y se configure.

Para ello estoy utilizando un if que comprueba que el archivo de configuración esté en el sistema. Sin embargo, se me queja que hay algun carácter que está mal:

if os.path.exists (nano \\~/.msmtprc):

La \\ la pongo para que me acepte el símbol ~ sin embargo no sé si afecta al resto de la línea. En ese caso, como debo señalar que el resto de línea está correcto?

Muchas gracias de antemano
Título: Re:No me da por bueno esta línea de texto [PYTHON]
Publicado por: Hu3c0 en Enero 17, 2016, 08:12:40 AM
Hola no tengo ni idea de  python quizás algún día me adentre en él pero en JAVA para los caracteres especiales se pondría un back_slash por caracter especial.

Prueba así \~\/\.msmtprc ohh \~\\\.msmtprc ohhh intenta meter la Ruta completa de path anteponiendo back_Slash a toda la Ruta \\home\\usuario\\ruta

Espero te sea de ayuda y sino de seguro alguno de los profesionales de python del foro te ayudará
Título: Re:No me da por bueno esta línea de texto [PYTHON]
Publicado por: Once en Enero 17, 2016, 11:38:23 AM
Hola, coloca nano \\~/.msmtprc entre comillas y no estoy seguro que sea necesario escapar el ~. También puedes usar cadenas crudas (así no es necesario escapar los caracteres especiales):
Código (python) [Seleccionar]
r"nano ~/.msmtprc"


Saludos!
Título: Re:No me da por bueno esta línea de texto [PYTHON]
Publicado por: Electrónico en Enero 17, 2016, 03:04:52 PM
Buenas a tod@s:

He probado de ponerlo entre comillas como comentaba Once y me funciona ;)


Muchas gracias cracks :)




Buenas a tod@s:

Ahora este fallo ya está corregido, sin embargo, ahora quiero entrar a editar el archivo ya que el if da que no existe el archivo y por lo tanto hay que crearlo. Y me dice que este directorio o archivo no existe :S

archi=open('~/.mailrc', 'w')#creamos el archivo de configuracion

La línea en cuestión es esta.

Estoy lanzando el script desde /home/pi, debo especificar otra ruta diferente o debo de posicionarme antes de lanzar esta línea de codigo en otro punto?

Cuando he hecho el script manualmente siempre lanzaba este comando desde /home/pi y no me daba problemas, por lo tanto ahora no sé porque se queja xD

Y en teoría no sé porque dice que no está, ya que lo que estoy haciendo es crearlo desde 0
Título: Re:No me da por bueno esta línea de texto [PYTHON]
Publicado por: Once en Enero 17, 2016, 05:17:17 PM
Hola, al parecer Python no reconoce el ~ como /home/<usuario>. Como veo que estás ejecutando el script en el mismo directorio que tienes el archivo, puedes ignorar el ~. A partir de ahí puedes trabajar con rutas relativas o absolutas. Justo como lo harías en una consola.

Saludos!
Título: Re:No me da por bueno esta línea de texto [PYTHON]
Publicado por: Electrónico en Enero 18, 2016, 04:42:46 PM
Buenas a tod@s:

He probado de quitar el símbolo ~de delante de la ruta tal como me indicas y continua sin funcionar correctamente. Me devuelve el siguiente error:

archi=open('/.msmtprc', 'w')

IOError: [Errno 13] Permission denied: '/.msmtprc'



Puede que necesite permisos extra? Pero si lo hiciese en el terminal manualmente escribiría  nano ~/.msmtprc con lo cual mi teoría de que hagan falta permisos extras se desmonta. Estoy ejecutando el script desde el usuario pi y quiero ejecutarlo desde este usuario.

Alguien sabe que ocurre?

Como mínimo ahora el error es distinto.

Muchas gracias de antemano y de veras, sóis unos verdaderos cracks :)

Aunque no participe demasiado en el foro os voy leyendo y siguiendo de cerca porque hay mucho nivel y calidad en este foro :)
Título: Re:No me da por bueno esta línea de texto [PYTHON]
Publicado por: Once en Enero 18, 2016, 06:09:04 PM
Hola, fíjate bien la ruta, estas intentando acceder al archivo .msmtprc en la raíz. Solo quita el / y deja solo: .msmtprc

Código (python) [Seleccionar]
archi=open('.msmtprc', 'w')

Saludos!
Título: Re:No me da por bueno esta línea de texto [PYTHON]
Publicado por: Electrónico en Enero 21, 2016, 04:29:25 PM
Buenas a tod@s:

Llevo un par de días peleandome con el código y no consigo.

No entiendo porque si lo hago manualmente introduciendo los comandos no me da ningún problema, sin embargo con el código de python y utilizando la biblioteca os sí que me da problemas.

Hice lo que me comentaste de sacar la barra de delante y me continua diciendo que no tengo permisos.

archi=open('.msmtprc', 'w')#creamos el archivo de configuracion
IOError: [Errno 13] Permission denied: '.msmtprc'


Qué debo hacer?

He probado de darle permisos 777 en lugar 600 que tenía hasta ahora, y continua con el mismo problema

Había pensado en crear el archivo después aplicarle el permiso 777 y seguidamente abrirlo para escribirlo, pero me temo que continuará pasando lo mismo.

Alguna idea???

Porque a mi se me estan acabando  :'(

Muchas gracias de antemano
Título: Re:No me da por bueno esta línea de texto [PYTHON]
Publicado por: Electrónico en Enero 23, 2016, 05:16:39 AM
Buenas a tod@s:

Esta tarde lo pruebo y os comento.

Espero que funcione, porque ya me está mosqueando el tema de que no funcione el código.

Y no lo digo para vosotros porque habéis sido de mucha ayuda. Pero me da rabia atascarme en un punto y no poder seguir adelante.


Muchas gracias de antemano.


Esta tarde os digo algo ;)




Buenas a tod@s:

He probado de al principio del script poner:

os.system('sudo -i')

Para así ejecutar lo que venía después como root pero no me deja

También he probado de poner sudo delante a la hora de abrir el archivo y tampoco.

Qué solución me queda para ejecutarlo como root?

El archivo lo tengo guardado en el usuario pi y me gustaría ejecutarlo desde este usuario.


Muchas gracias.




Buenas a tod@s:

Para facilitar que me podáis ayudar os dejo la parte del código que me falla:

#!/bin/python



import os #Importamos la biblioteca para introducir comandos por el terminal
import os.path  #Importamos la biblioteca para comprovar rutas de directorios

def conf(): #Comprovamos que todos los archivos de configuracion existan
#if not os.path.exists(nano ~/.msmtprc): (linea original)
os.chdir('/home/pi')
if os.path.exists ("nano \\~/.msmtprc"):
return
else:
os.chdir('/')
print("El sistema detecta que no esta configurado el asistente de mail")
print("Se procede a configurarlo. Este proceso se llevara una sola vez")
direccion = raw_input("Introduce tu direccion de correo: ")
pswd = raw_input("Introduce la contrasenya de tu cuenta de correo: ")
os.system('sudo apt-get install msmtp-mta') #instalamos el cliente del protocolo SMTP
archi=open('sudo .msmtprc', 'w')#creamos el archivo de configuracion
archi.write('#Cuenta gmail')
archi.write('account gmail')
archi.write('auth on')
archi.write('host smtp.gmail.com')
archi.write('from '+direccion)
archi.write('auth on')
archi.write('tls on')
archi.write('tls_trust_file /usr/share/ca-certificates/mozilla/Equifax_Secure_CA.crt')
archi.write('user '+direccion)
archi.write('password '+pswd)
archi.write('port 587')
archi.write('account default : gmail')
archi.close()
os.system('chmod 600 .msmtprc') #Damo permisos al archivo creado para que solo sea accesible por el propio usuario


if os.path.exists ("nano \\~/.mailrc") :
return
else:
os.chdir('/')
os.system('sudo apt-get install heirloom-mailx') #Instalamos un programa que nos permita escribir los emails en el terminal
archi=open('sudo .mailrc', 'w')#creamos el archivo de configuracion
archi.write('set sendmail="/usr/bin/msmtp"')
archi.write('set message-sendmail-extra-arguments="-a gmail"')
archi.close()
Título: Re:No me da por bueno esta línea de texto [PYTHON]
Publicado por: Hu3c0 en Enero 23, 2016, 06:04:31 AM
Lo que te ha dicho Alanprogrammer es que le des a tu script permisos root así no necesitarás dentro del código dar ningún permiso.
Sitúate por terminal en la carpeta donde tengas es script en python y dale todos los permisos como root : chmod +x 'nombrearchivo.py' con esto debe funcionar tu script sin  problemas.
Título: Re:No me da por bueno esta línea de texto [PYTHON]
Publicado por: Once en Enero 23, 2016, 01:26:22 PM
Hola, si estás seguro que el archivo tiene los permisos correctos, no debería haber problemas. Y ejecutar el script como root no debería ser necesario.

Ahora, revisando el código veo que estás confundiendo las cosas. Os.system() te sirve para ejecutar comandos en la consola y hasta ahí, el resto es Python puro y duro. Así que esto está mal:

Código (python) [Seleccionar]
archi=open('sudo .msmtprc', 'w')

Ahora, el problema está acá: Primero haces os.chdir('/home/pi') lo que está bien, te mueve al directorio donde tienes el archivo. Pero luego del condicional, lo primero que haces es:
os.chdir('/') lo que te mueve a la raíz y cuando intentas leer el archivo, estás haciendolo en: /.msmtprc por eso de nuevo el error en los permisos. Elimina esa línea, quita los sudo de donde no es necesario, ten cuidado con estás líneas:
Código (python) [Seleccionar]
if os.path.exists ("nano \\~/.msmtprc"): que están mal. Y no deberías tener problemas. Si ocurre algo, pucblica de nuevo el código modificado y el error completo tal y como te lo tira Python.

Saludos!
Título: Re:No me da por bueno esta línea de texto [PYTHON]
Publicado por: Electrónico en Enero 24, 2016, 05:36:34 PM
Buenas a tod@s:

Qué crack!!! Has solucionado todo los problemas :)