我需要运行一个命令行工具来validation一个文件并显示一堆关于它的信息。 我可以将这些信息导出到一个txt文件,但是它包含了很多额外的数据。 我只需要一行文件:
“签名是时间戳:2012年5月24日星期四17:13:16”
时间可能会有所不同,但我只需要提取这些数据并将其放入一个文件。 有没有从命令行或Python可以做到这一点的好方法? 我打算使用Python来定位和下载要validation的文件,然后运行命令行工具进行validation,以便可以获取数据,然后通过电子邮件发送数据。
这是在Windows PC上。
谢谢你的帮助
你不需要使用Python来做到这一点。 如果您使用的是Unix环境,则可以从命令行使用fgrep
,并将输出重定向到另一个文件。
fgrep "The signature is timestamped: " input.txt > output.txt
在Windows上,您可以使用:
find "The signature is timestamped: " < input.txt > output.txt
你提到命令行实用程序“显示”了一些信息,所以它可能会打印到stdout
,所以一种方法是在Python中运行实用程序,并捕获输出。
import subprocess # Try with some basic commands here maybe... file_info = subprocess.check_output(['your_command_name', 'input_file']) for line in file_info.splitlines(): # print line here to see what you get if file_info.startswith('The signature is timestamped: '): print line # do something here
这应该与“使用python下载和定位”很好地匹配 – 以便可以使用urllib.urlretrieve下载(可能使用临时名称),然后在temp文件上运行命令行util以获取详细信息,然后smtplib发送电子邮件…
在Python中你可以做这样的事情:
timestamp = '' with open('./filename', 'r') as f: timestamp = [line for line in f.readlines() if 'The signature is timestamped: ' in line]
我还没有测试过,但我认为它会工作。 不知道是否有更好的解决方案。
我不太确定这个导出文件的确切语法,但是python的readlines()
函数可能对此有帮助。
h=open(pathname,'r') #opens the file for reading for line in h.readlines(): print line#this will print out the contents of each line of the text file
如果文本文件每次都有相同的格式,其余的很容易; 如果不是,你可以做类似的事情
for line in h.readlines(): if line.split()[3] == 'timestamped': print line output_string=line
至于写入文件,您需要打开文件写入h=open(name, "w")
,然后使用h.write(output_string)
将其写入文本文件