[SOLUCIONADO] No me da por bueno esta línea de texto [PYTHON]

Iniciado por Electrónico, Enero 17, 2016, 06:58:26 AM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Enero 17, 2016, 06:58:26 AM Ultima modificación: Enero 24, 2016, 05:39:57 PM por rollth
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:

Código: php
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

Enero 17, 2016, 08:12:40 AM #1 Ultima modificación: Enero 17, 2016, 08:18:27 AM por Hu3c0
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á
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Enero 17, 2016, 11:38:23 AM #2 Ultima modificación: Enero 17, 2016, 12:42:11 PM por Once
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
r"nano ~/.msmtprc"



Saludos!







No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Enero 17, 2016, 03:04:52 PM #3 Ultima modificación: Enero 23, 2016, 02:05:07 PM por Stiuvert
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

Código: php
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

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!







No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Enero 18, 2016, 04:42:46 PM #5 Ultima modificación: Enero 18, 2016, 05:10:48 PM por Electrónico
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:

Código: php
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 
Código: php
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 :)

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
archi=open('.msmtprc', 'w')


Saludos!







No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

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.

Código: php
 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


Enero 23, 2016, 05:16:39 AM #9 Ultima modificación: Enero 23, 2016, 02:05:57 PM por Stiuvert
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:

Código: php
#!/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()

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.
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

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
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
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!







No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Buenas a tod@s:

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