Estoy haciendo algunas llamadas wget dentro de un script de python, donde emito algún método PUT para enviar algunos comandos, pero cuando python analiza el comando wget que me gustaría enviar, informa un KeyError en una variable dentro de la llamada wget.

El comando que creo es

wget = "wget --http-user={user} --http-password={password} --header='Accept:application/json' --header='Content-Type:application/json' --method=PUT --body-data='{'mode':'{bodyD}'}' -O- http://{IPaddress}/api/{v}/{cm}" .format(user=usr,password=pswd,IPaddress=node,v=version,bodyD=bodyData,cm=Command)

Y KeyError es "KeyError: 'mode'", al enviar ese comando. ¿De qué viene el error? ¿Tengo que escapar de la palabra "modo" porque está reservada?

Gracias de antemano,

Saludos

2
ndarkness 10 dic. 2015 a las 12:33

3 respuestas

La mejor respuesta

Pruébelo con llaves dobles {{}} así:

wget = "wget --http-user={user} --http-password={password} --header='Accept:application/json' --header='Content-Type:application/json' --method=PUT --body-data='{{'mode':'{bodyD}'}}' -O- http://{IPaddress}/api/{v}/{cm}" .format(user=usr,password=pswd,IPaddress=node,v=version,bodyD=bodyData,cm=Command)
1
mirosval 10 dic. 2015 a las 09:40

Intenté usar la respuesta de itsneo, pero no funcionó. Sin embargo, eso me dio una pista y doblé las llaves que hizo.

Entonces este comando funciona

wget = "wget --http-user={user} --http-password={password} --header='Accept:application/json' --header='Content-Type:application/json' --method=PUT --body-data='{{mode:{bodyD}}}' -O- http://{IPaddress}/api/{v}/{cm}" .format(user=usr,password=pswd,IPaddress=node,v=version,bodyD=bodyData,cm=Command)
0
ndarkness 10 dic. 2015 a las 09:42

Utilice el doble {{ }} como se sugiere en https://stackoverflow.com/a/5466478/968442,

También BodyData generalmente sería JSON, que podría requerir comillas dobles.

usr = "test"
pswd = "test"
node = "test"
version = "test"
bodyData = "test"
Command = "test"
wget = """wget --http-user={user} --http-password={password} --header='Accept:application/json' --header='Content-Type:application/json' --method=PUT --body-data='{{"mode":"{bodyD}"}}' -O- http://{IPaddress}/api/{v}/{cm}""".format(user=usr,password=pswd,IPaddress=node,v=version,bodyD=bodyData,cm=Command)

print wget

Registros:

> python test.py
wget --http-user=test --http-password=test --header='Accept:application/json' --header='Content-Type:application/json' --method=PUT --body-data='{"mode":"test"}' -O- http://test/api/test/test
1
Community 23 may. 2017 a las 12:15
34198160