如何在终端命令中的python中赋值变量?

时间:2016-02-07 10:29:22

标签: python linux terminal

我的代码:

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本身做到这一点?

3 个答案:

答案 0 :(得分:2)

在命令周围使用单引号,甚至使用三引号,以便构成命令一部分的引号不会与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并将响应附加到文件。默认情况下请求压缩。

答案 1 :(得分:1)

您想要的是一个简单的字符串格式

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)

答案 2 :(得分:0)

使用subprocesssubprocess模块提供了更强大的工具来生成新流程并检索其结果;使用该模块比使用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)