改进 if "make: *** [main] Error 2" in err.decode('utf-8'): print("loading push error log") filename = os.path.join(contents, self.name, "error_make_log") subprocess.call("echo '' > {}".format(filename), shell=True, cwd=contents) start.error_make(filename, rel.decode('utf-8') ) start.error_make(filename, err.decode('utf-8') ) else: print("loading push libs") # start.push_lib(os.path.join(contents, self.name), path, ref)
时间: 2024-02-14 14:10:08 浏览: 125
可以考虑以下改进:
1. 为了避免重复代码,可以将 `start.error_make(filename, rel.decode('utf-8'))` 和 `start.error_make(filename, err.decode('utf-8'))` 合并为一个函数,并将该函数命名为 `log_error()`。
2. 为了提高代码的可读性,可以将 `filename = os.path.join(contents, self.name, "error_make_log")` 放在函数开头,这样可以更清晰地表明这个变量的作用。
3. 为了使代码更加健壮,可以在调用 `subprocess.call` 时添加异常处理,以处理可能出现的异常。
改进后的代码如下:
```
def log_error(contents, name, rel, err):
"""
记录错误信息到文件中
:param contents: 存放仓库内容的目录
:param name: 库名称
:param rel: make 命令的输出结果
:param err: make 命令的错误信息
"""
# 构建 error log 的路径
filename = os.path.join(contents, name, "error_make_log")
# 清空原有的 error log
subprocess.call(f"echo '' > {filename}", shell=True, cwd=contents)
# 记录错误信息到 error log 中
with open(filename, 'w', encoding='utf-8') as f:
f.write(rel.decode('utf-8'))
f.write(err.decode('utf-8'))
def make_push_libs(contents, name, path, ref):
"""
执行 make 命令并推送库到远程仓库
:param contents: 存放仓库内容的目录
:param name: 库名称
:param path: 本地库的路径
:param ref: 推送的分支名
"""
# 构建 make 命令
cmd = f"make -C {path} push ref={ref}"
# 执行 make 命令
p = subprocess.Popen(cmd, shell=True, cwd=contents, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out, err = p.communicate()
# 如果出现错误,记录错误信息到 error log 中
if "make: *** [main] Error 2" in err.decode('utf-8'):
print("loading push error log")
log_error(contents, name, out, err)
else:
print("loading push libs")
# start.push_lib(os.path.join(contents, name), path, ref)
```
注意,此处的改进仅供参考,具体实现需要根据实际需求进行调整。
阅读全文