Mi código:
import os from xml.dom import minidom doc = minidom.parse("jobs.xml") job = doc.getElementsByTagName("job")[0] id = job.getElementsByTagName("id")[0] name = job.getElementsByTagName("name")[0] id_data = id.firstChild.data name_data = name.firstChild.data os.system('curl --compressed -H "Accept: application/xml" -X GET "http://localhost:19888/ws/v1/history/mapreduce/jobs/"') >>> /home/ankit/rrd-xml/task.xmlQuiero obtener los comandos como
os.system('curl --compressed -H "Accept: application/xml" -X GET "http://localhost:19888/ws/v1/history/mapreduce/jobs/< variable value of name_data >"') >>> /home/ankit/rrd-xml/task.xml¿Cómo puedo hacerlo en Python mismo?
Use comillas simples alrededor del comando, o incluso comillas triples, para que las comillas que forman parte del comando no se confundan con la cadena de Python:
os.system('curl --compressed -H "Accept: application/xml" -X GET "http://localhost:19888/ws/v1/history/mapreduce/jobs/{}" >> /home/ankit/rrd-xml/task.xml'.format(name_data)) Eso funcionará, pero no es lo mejor. Sería mejor que usaras Python para realizar la solicitud HTTP. requests es un buen módulo para esto:
import requests url = 'http://localhost:19888/ws/v1/history/mapreduce/jobs/{}'.format(name_data) headers = {'Accept': 'application/xml'} response = requests.get(url, headers=headers) with open('/home/ankit/rrd-xml/task.xml', 'a') as outfile: outfile.write(response.content) Este código OBTENDRÁ la URL, configurando el encabezado Accept en application/xml y adjuntando la respuesta al archivo. La compresión se solicita de forma predeterminada.
Lo que quiere es un formato de cadena simple.
import os from xml.dom import minidom doc = minidom.parse("jobs.xml") job = doc.getElementsByTagName("job")[0] id = job.getElementsByTagName("id")[0] name = job.getElementsByTagName("name")[0] id_data = id.firstChild.data name_data = name.firstChild.data url = 'http://localhost:19888/ws/v1/history/mapreduce/jobs/{name}'.format(name=name_data) cmd = 'curl --compressed -H "Accept: application/xml" -X GET "{url}"'.format(url=url) os.system(cmd)Usar subprocess . El módulo de subprocess proporciona instalaciones más potentes para generar nuevos procesos y recuperar sus resultados; usar ese módulo es preferible a usar la función os.system .
import subprocess import shlex command = shlex.split('curl --compressed -H "Accept: application/xml" -X GET http://localhost:19888/ws/v1/history/mapreduce/jobs/') with open('/home/ankit/rrd-xml/task.xml', 'a') as f: subprocess.Popen(command, stdout=f)