Python - line 0: syntax error near unexpected token `('

 
Vista:
sin imagen de perfil
Val: 39
Ha disminuido su posición en 3 puestos en Python (en relación al último mes)
Gráfica de Python

line 0: syntax error near unexpected token `('

Publicado por CARLOS (13 intervenciones) el 02/12/2019 10:46:27
Hola foreros:

Necesito enviar de forma automática un sencillo correo de alarma a los destinatarios de una consulta SQL y tengo el código siguiente que me da un error de sintaxis.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# !/usr/bin/env python
 
# Importar los modulos y librerias  necesarias
import subprocess
import os
import MySQLdb
 
# Funcion para conectarse con la base de datos
def conectar():
    return MySQLdb.connect('localhost','user','passwd','test')
 
# Funcion correo para el manejo de correos destinatarios de las alertas
def correo():
    db=conectar() # Se conecta con la base de	datos 
    db=db.cursor() # Desplaza el cursor a traves de la	base de datos
    db.execute('SELECT email FROM members') # Ejecuta una seleccion de la tabla usuarios
    correos=db.fetchall() # Almacena la seleccion de la tabla usuarios
 
    # Ciclo para el envio de correos a cada destinatario de la base de datos
    for correo in correos:
        subprocess.Popen('echo Alarma | sudo mail -s Alarma %(correo)', shell=True)
 
    db.close() # Cierra la conexion temporal a la base de datos
 
correo();


Esta es la respuesta que no consigo resolver:

1
2
/bin/sh: -c: line 0: syntax error near unexpected token `('

Ayuda please...
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 César
Val: 46
Ha aumentado su posición en 2 puestos en Python (en relación al último mes)
Gráfica de Python

line 0: syntax error near unexpected token `("

Publicado por César (18 intervenciones) el 02/12/2019 17:06:00
Hola Carlos

Yo, normalmente utilizo sqlite3, pero creo que las órdenes y variables para utilizarlas son iguales.

en estas líneas:
1
2
3
db=conectar() # Se conecta con la base de datos
 
db=db.cursor() # Desplaza el cursor a traves de la base de datos
Yo, normalmente, utilizo nombres diferentes para la conexión y el cursor..
Por ejemplo:
1
2
3
db=conectar() # Se conecta con la base de datos
 
cur=db.cursor() # Desplaza el cursor a traves de la base de datos

Podrías probar a ver.....

Saludos
César
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
Val: 39
Ha disminuido su posición en 3 puestos en Python (en relación al último mes)
Gráfica de Python

line 0: syntax error near unexpected token `("

Publicado por CARLOS (13 intervenciones) el 03/12/2019 09:21:13
Gracias Cesar:
Lo he comprobado pero dice lo mismo.
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 César
Val: 46
Ha aumentado su posición en 2 puestos en Python (en relación al último mes)
Gráfica de Python

line 0: syntax error near unexpected token `("

Publicado por César (18 intervenciones) el 03/12/2019 18:51:58
Hola de nuevo, Carlos.

Bueno, me he fijado en otra cosa que no vi ayer:
En la sentencia sql "('SELECT email FROM members')"
Veo que le falta el punto y coma final, vamos que debería estar así:
('SELECT email FROM members;')

A ver si va a ser eso.....

Saludos
César
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
Val: 39
Ha disminuido su posición en 3 puestos en Python (en relación al último mes)
Gráfica de Python

line 0: syntax error near unexpected token `("

Publicado por CARLOS (13 intervenciones) el 04/12/2019 17:56:07
Nada, sigue igual...
Mas bien el error debe estar en la salida de
1
db.fetchall()
ya que si imprimes el resultado, saca las direcciones de email entrecomilladas y y con parentesis y creo que eso no le gusta a la instruccion mail. No se si me explico...

('email1@email.com')

('email2@email.com')

('email3@email.com')
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 César
Val: 46
Ha aumentado su posición en 2 puestos en Python (en relación al último mes)
Gráfica de Python

line 0: syntax error near unexpected token `("

Publicado por César (18 intervenciones) el 04/12/2019 19:20:28
Hola Carlos

Ok, entonces la sentencia sql es correcta jeje, vamos a dejar ese lado.

Vamos a ver, en la sentencia subprocess directamente pones el nombre de la variable 'correo' y tienes que decirle que es una variable:

Tú lo tienes así:
1
2
for correo in correos:
    subprocess.Popen('echo Alarma | sudo mail -s Alarma %(correo)', shell=True)

Y debería ser así:
1
2
for correo in correos:
    subprocess.Popen('echo Alarma | sudo mail -s Alarma %('+correo+')', shell=True)

Si a mail no le gustara así, otra opción sería decirle la posición en la lista de los resultados que te da. "('email1@email.com')" esto no deja de ser una lista con un solo ítem.
1
2
for correo in correos:
    subprocess.Popen('echo Alarma | sudo mail -s Alarma %('+correo[0]+')', shell=True)

Venga que creo que nos hacemos con ello.

Saludos
César
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
Val: 39
Ha disminuido su posición en 3 puestos en Python (en relación al último mes)
Gráfica de Python

line 0: syntax error near unexpected token `("

Publicado por CARLOS (13 intervenciones) el 16/12/2019 18:47:53
Ante todo, disculpa Cesar por el retraso en contestar:
He probado todo lo que me dices y nada, no funciona.
Saludos
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 César
Val: 46
Ha aumentado su posición en 2 puestos en Python (en relación al último mes)
Gráfica de Python

line 0: syntax error near unexpected token `("

Publicado por César (18 intervenciones) el 17/12/2019 12:04:02
Buenas Carlos.

He estado revisando documentación de mail y creo que la sentencia no está bien construida....

La tuya es:
1
subprocess.Popen('echo Alarma | sudo mail -s Alarma %('correo@correo.com')', shell=True)

Y debería ser:
1
subprocess.Popen('echo "Alarma" | sudo mail -s "Alarma" correo@correo.com')

prueba esta con un correo válido, si te funciona, el código que deberías tener sería:
1
2
for correo in correos:
    subprocess.Popen('echo "Alarma" | sudo mail -s "Alarma" '+correo[0]+')', shell=True)

a ver qué pasa, si no te funciona vamos explorando otras cosas.... (Que sepas que estoy aprendiendo contigo jeje.)

Saludos
César
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
Val: 39
Ha disminuido su posición en 3 puestos en Python (en relación al último mes)
Gráfica de Python

line 0: syntax error near unexpected token `("

Publicado por CARLOS (13 intervenciones) el 17/12/2019 13:49:57
Creo que ya lo tengo. Prueba con

1
2
for correo in correos:
    subprocess.Popen('echo "Alarma" | sudo mail -s "Alarma" ' + correo[0], shell=True)
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