我在devbox上运行python脚本远程ssh在网格网关框上启动另一个运行hive查询的python脚本并返回输出,然后以datestamp.tsv格式将其保存在我的devbox上。
有些查询我必须为两个集群运行for循环。问题是输出被保存,但是有空行,我希望datestamp在查询输出之后。这是我现在的输出 -
2014_03_28 PT 588.12 396.73
2014_03_28 DB 0.17 0.0
每次在for循环中运行查询后都会有一个空行。
如何删除空行?并将日期戳放在最后。输出格式我希望它在 -
PT 588.12 396.73 2014_03_28
DB 0.17 0.0 2014_03_28
父脚本:
def get_compute_resources():
global output
ensure_directory(pipeline_name, user, star_date, "daily_compute_resources")
for grid in grids:
cmd = 'ssh -2 -i /home/abcd/.ssh/id_dsa -l abcd -o StrictHostKeyChecking=no -o CheckHostIP=no hostname "python2.6 /homes/abcd/starling/fetch_daily_user_summary.py -u ' + user + ' -g ' + grid + ' -d ' + starling_date + '" >> /home/abcd/projects/starling/daily_compute_resources/'+ pipeline_name +'/'+ user +'/'+ starling_date +'.tsv'
resources = make_call(cmd).rstrip()
print resources
远程机器脚本:
cmd = "/home/y/bin/hive -e 'use star; SELECT ROUND(SUM((map_slot_seconds)/3600/24/2),2), ROUND(SUM((reduce_slots_seconds)/3600/24/2),2) from starling_job_summary where user=%s and grid=%s and dt like %s group by dt;' -hiveconf mapred.job.queue.name=unfunded -hiveconf mapred.reduce.tasks=1" % (user, grid, date)
resources = Popen(cmd, shell=True, stdout=PIPE).communicate()[0]
output = output_date+' '+output_grid+' '+resources
print output
感谢。
答案 0 :(得分:0)
这应该有效。它假定您在执行python的同一目录中将您提供的数据作为名为input.txt的文件提供,并以output.txt文件所需的格式提供数据。 if line.strip()
检查将忽略完全为空白的行,除此之外,这里唯一有点酷的是split()的maxsplit参数,它将日期与行的其余部分分开。
infile = 'input.txt'
outfile = 'output.txt'
with open(infile) as f:
with open(outfile, mode='w') as output:
data = f.readlines()
for line in data:
if line.strip():
date, rest = line.split(maxsplit=1)
date = date.strip()
rest = rest.strip()
output.write(rest + ' ' + date + "\n")
有可能在某种程度上清理空白处理,但这更简单。
输出:
PT 588.12 396.73 2014_03_28
DB 0.17 0.0 2014_03_28
答案 1 :(得分:0)
额外的空白区域可能分别来自output_date
和resources
上的前导或尾随换行符。试一试:
print '{date} {grid} {res}'.format(date=output_date.strip(),
grid=grid,
res=resources.strip())
作为一般性评论:使用str.format
是使用可变数据创建字符串的传统方法。您可以使用%
语法在子脚本中执行类似的操作,但您可以使用此方法提高父脚本的可读性。
答案 2 :(得分:0)
我认为您必须更改print
语句,以逗号结尾:
print output,
来自the official python documentation:
A' \ n'字符写在最后,除非打印声明 以逗号结尾