顺序读取文件并执行操作

#!/usr/bin/env python3
import os
import re
import statistics
import subprocess
import sys
from importlib import reload
reload(sys)

# 格式化需要执行的命令
limit = "timeout 1h "
t = 'time -f "%e" '
coqQFBV_path = "/home/ctt/Documents/coq-qfbv/src/ocaml/_build/default/coqQFBV.exe"
coqQFBV_mulEx_path = "/home/ctt/Documents/coq-qfbv-mulEx/src/ocaml/_build/default/coqQFBV.exe"
arg = " -no-certify-unsat "
benchmark_path = "/home/ctt/Documents/QF_BV_sub/QF_BV_test/"
# 添加环境变量
my_env = os.environ.copy()
my_env['PATH'] = my_env['PATH'] + ':/home/ctt/Documents/kissat-master/build:/usr/bin'
# 引入测试文件夹
files_list = os.listdir(benchmark_path)
files_list.sort()


# 计算去除最大最小值的10次平均时间
def average_time(cmd, tool):
    average_list = list()
    satisfiability = ''
    for i in range(9):
        res = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, env=my_env)
        out, err = res.communicate()
        # 格式化输出
        satisfiability = str(out).lstrip('b\'').rstrip('\\n\'')
        time = str(err).lstrip('b\'').rstrip('\\n\'')
        if 'Command terminated by signal 9' in time:
            time = time[32:]
        if time == '':
            return -1, "---"
        print(tool, "的第", i, "次耗时:", float(time))
        average_list.append(float(time))
    # average_list.remove(min(average_list))
    # average_list.remove(max(average_list))
    return round(statistics.mean(average_list), 2), satisfiability


for file_name in files_list:
    with open("result.txt", "a+") as fp:
        # 格式化命令
        # 使用CoqQFBV验证文件
        cmd1 = limit + t + coqQFBV_path + arg + benchmark_path + file_name
        mean_time1, satisfiability1 = average_time(cmd1, "coqQFBV")
        # 使用CoqQFBV_mulEx
        cmd2 = limit + t + coqQFBV_mulEx_path + arg + benchmark_path + file_name
        mean_time2, satisfiability2 = average_time(cmd2, "coqQFBV_mulEx")
        # 性能提升率
        improvement = (mean_time1-mean_time2) / mean_time1
        improvement = '{:.0%}'.format(improvement)
        # 输出到result文件中
        print("file =", file_name, "        result1 =", satisfiability1, "      result2 =", satisfiability2, file=fp)
        print("time1 =", mean_time1, "     time2 =", mean_time2, "     improvement =", improvement, file=fp)
        # 输出文件名和结果到窗口
        print("file =", file_name, "        result1 =", satisfiability1, "      result2 =", satisfiability2)
        print("time1 =", mean_time1, "     time2 =", mean_time2, "     improvement =", improvement)


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值