簡體   English   中英

如何在終端命令中的python中賦值變量?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM