[英]how to assign variable value in python in terminal commands?
我的代碼:
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.xml
我想得到像這樣的命令
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
我怎么能在python本身做到這一點?
在命令周圍使用單引號,甚至是三引號,以便構成命令一部分的引號不會與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))
這將有效,但它不是最好的。 使用Python來發出HTTP請求會更好。 requests
是一個很好的模塊:
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)
此代碼將獲取URL,將Accept
標頭設置為application/xml
並將響應附加到文件。 默認情況下請求壓縮。
你想要的是一個簡單的字符串格式 。
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)
使用subprocess
。 subprocess
模塊提供了更強大的工具來生成新流程並檢索其結果; 使用該模塊比使用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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.