Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
T
test-vscode-c-win
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
问题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
银宸大学计算机学院
教师群组
赵鹏翀-zpc
test-vscode-c-win
提交
284f119e
提交
284f119e
3月 17, 2021
创建
作者:
宋海霞
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
更新 local_test_c.py
上级
60c4a3d3
显示空白字符变更
内嵌
并排
正在显示
1 个修改的文件
包含
119 行增加
和
34 行删除
+119
-34
local_test_c.py
local_test_c.py
+119
-34
没有找到文件。
local_test_c.py
浏览文件 @
284f119e
#!/bin/env python
#!/bin/env python
# -*- coding: utf-8 -*-
# -*- coding: utf-8 -*-
# 不要删除或修改此文件
import
difflib
import
difflib
import
sys
import
sys
import
argparse
import
argparse
...
@@ -19,8 +17,9 @@ from colorama import Fore, init, AnsiToWin32
...
@@ -19,8 +17,9 @@ from colorama import Fore, init, AnsiToWin32
init
(
wrap
=
False
)
init
(
wrap
=
False
)
stream
=
AnsiToWin32
(
sys
.
stderr
)
.
stream
stream
=
AnsiToWin32
(
sys
.
stderr
)
.
stream
red
=
lambda
text
:
'
\033
[0;31m'
+
text
+
'
\033
[0m'
red
=
lambda
text
:
'
\033
[0;31;1m'
+
text
+
'
\033
[0m'
green
=
lambda
text
:
'
\033
[0;32m'
+
text
+
'
\033
[0m'
green
=
lambda
text
:
'
\033
[0;32;1m'
+
text
+
'
\033
[0m'
yellow
=
lambda
text
:
'
\033
[0;33;1m'
+
text
+
'
\033
[0m'
# 读取文件
# 读取文件
def
read_file
(
file_name
):
def
read_file
(
file_name
):
...
@@ -34,6 +33,8 @@ def read_file(file_name):
...
@@ -34,6 +33,8 @@ def read_file(file_name):
print
(
'Read input file Error: {0}'
.
format
(
error
))
print
(
'Read input file Error: {0}'
.
format
(
error
))
sys
.
exit
()
sys
.
exit
()
# 比较时忽略行末的空格和文件末尾的回车换行
# 比较时忽略行末的空格和文件末尾的回车换行
def
advanced_file_compare
(
file1
,
file2
):
def
advanced_file_compare
(
file1
,
file2
):
f1
=
open
(
file1
)
f1
=
open
(
file1
)
...
@@ -71,25 +72,34 @@ def advanced_file_compare(file1, file2):
...
@@ -71,25 +72,34 @@ def advanced_file_compare(file1, file2):
return
returnVal
return
returnVal
# 比较两个文件并把结果生成一份html文本
# 比较两个文件并把结果生成一份html文本
def
compare_file
(
file1
,
file2
,
seqNum
):
def
compare_file
(
file1
,
file2
,
seqNum
,
caseCount
):
returnVal
=
0
returnVal
=
0
if
file1
==
""
or
file2
==
""
:
if
file1
==
""
or
file2
==
""
:
print
(
'文件路径不能为空:第一个文件的路径:{0}, 第二个文件的路径:{1} .'
.
format
(
file1
,
file2
))
print
(
'文件路径不能为空:第一个文件的路径:{0}, 第二个文件的路径:{1} .'
.
format
(
file1
,
file2
))
sys
.
exit
()
sys
.
exit
()
else
:
else
:
print
(
"正在比较文件 {0} 和 {1}"
.
format
(
file1
,
file2
),
end
=
': '
)
print
(
"正在比较文件 {0} 和 {1}"
.
format
(
file1
,
file2
),
end
=
': '
)
# if os.path.isfile(file1) and os.path.isfile(file2) and filecmp.cmp(file1, file2):
# if os.path.isfile(file1) and os.path.isfile(file2) and filecmp.cmp(file1, file2):
if
os
.
path
.
isfile
(
file1
)
and
os
.
path
.
isfile
(
file2
)
and
advanced_file_compare
(
file1
,
file2
):
if
os
.
path
.
isfile
(
file1
)
and
os
.
path
.
isfile
(
file2
)
and
advanced_file_compare
(
file1
,
file2
):
print
(
"文件相同"
)
print
(
"文件相同"
)
print
(
Fore
.
GREEN
+
"Case{0} 验证成功"
.
format
(
seqNum
),
file
=
stream
,
end
=
''
)
score
=
60
print
(
Fore
.
WHITE
,
file
=
stream
)
if
seqNum
==
caseCount
:
score
=
100
else
:
score
=
score
+
40
/
caseCount
*
seqNum
promptInfo
=
"Case{0} 验证成功, 分数: {1}"
.
format
(
seqNum
,
round
(
score
,
2
))
outputPromptInfo
(
bIncludeCi
,
promptInfo
,
1
)
# print(Fore.GREEN + "Case{0} 验证成功, 分数: {1}".format(seqNum, round(score, 2)), file = stream, end='')
# print(Fore.WHITE, file = stream)
returnVal
=
1
returnVal
=
1
return
returnVal
return
returnVal
else
:
else
:
print
(
"文件不同"
)
print
(
"文件不同"
)
print
(
Fore
.
RED
+
"Case{0} 验证失败"
.
format
(
seqNum
),
file
=
stream
,
end
=
''
)
promptInfo
=
"Case{0} 验证失败"
.
format
(
seqNum
)
print
(
Fore
.
WHITE
,
file
=
stream
)
outputPromptInfo
(
bIncludeCi
,
promptInfo
,
2
)
# print(Fore.RED + "Case{0} 验证失败".format(seqNum), file = stream, end='')
# print(Fore.WHITE, file = stream)
text1_lines
=
read_file
(
file1
)
text1_lines
=
read_file
(
file1
)
text2_lines
=
read_file
(
file2
)
text2_lines
=
read_file
(
file2
)
...
@@ -106,33 +116,106 @@ def compare_file(file1, file2, seqNum):
...
@@ -106,33 +116,106 @@ def compare_file(file1, file2, seqNum):
finally
:
finally
:
return
returnVal
return
returnVal
# 1表示绿色,2表示红色,3表示黄色
def
outputPromptInfo
(
bIncludeCi
,
promptInfo
,
color
):
if
__name__
==
"__main__"
:
if
bIncludeCi
:
print
()
if
color
==
1
:
print
(
green
(
"start validatehahaha哈哈"
))
print
(
green
(
promptInfo
))
print
(
Fore
.
YELLOW
+
"提示:
\n
1.如果验证程序长时间未结束,说明应用程序中可能存在死循环。请停止验证程序,修改应用程序后再验证。
\n
2.如果提示‘python’不是内部或外部命令,也不是可运行的程序或批处理文件。需要设置 Python 的环境变量并重启开发环境来解决此问题。"
,
file
=
stream
)
elif
color
==
2
:
print
(
red
(
promptInfo
))
elif
color
==
3
:
print
(
yellow
(
promptInfo
))
else
:
if
color
==
1
:
print
(
Fore
.
GREEN
+
promptInfo
,
file
=
stream
)
elif
color
==
2
:
print
(
Fore
.
RED
+
promptInfo
,
file
=
stream
)
elif
color
==
3
:
print
(
Fore
.
YELLOW
+
promptInfo
,
file
=
stream
)
print
(
Fore
.
WHITE
,
file
=
stream
)
print
(
Fore
.
WHITE
,
file
=
stream
)
if
__name__
==
"__main__"
:
bIncludeCi
=
False
if
len
(
sys
.
argv
)
>
1
and
sys
.
argv
[
1
]
==
"ci"
:
bIncludeCi
=
True
promptInfo
=
"提示:
\n
1.如果验证程序长时间未结束,说明应用程序中可能存在死循环。请停止验证程序,修改应用程序后再验证。
\n
2.如果提示‘python’不是内部或外部命令,也不是可运行的程序或批处理文件。需要设置 Python 的环境变量并重启开发环境来解决此问题。"
outputPromptInfo
(
bIncludeCi
,
promptInfo
,
3
)
# if bIncludeCi :
# print(yellow(promptInfo))
# else:
# print(Fore.YELLOW + promptInfo, file = stream)
# print(Fore.WHITE, file = stream)
print
(
"开发环境中的 Python 解释器版本号:"
+
platform
.
python_version
())
print
(
"开发环境中的 Python 解释器版本号:"
+
platform
.
python_version
())
print
(
"环境变量中的 Python 解释器版本号:"
,
end
=
' '
)
print
(
"环境变量中的 Python 解释器版本号:"
,
end
=
' '
)
sys
.
stdout
.
flush
()
sys
.
stdout
.
flush
()
execResult
=
os
.
system
(
"python --version"
)
execResult
=
os
.
system
(
"python --version"
)
if
execResult
!=
0
:
if
execResult
!=
0
:
print
(
Fore
.
RED
+
"应用程序异常,返回值:{0}。"
.
format
(
execResult
),
file
=
stream
,
end
=
''
)
errorInfo
=
"应用程序异常,返回值:{0}。"
.
format
(
execResult
)
print
(
Fore
.
WHITE
,
file
=
stream
)
outputPromptInfo
(
bIncludeCi
,
errorInfo
,
2
)
# if bIncludeCi :
# print(red(errorInfo))
# else:
# print(Fore.RED + "应用程序异常,返回值:{0}。".format(execResult), file = stream, end='')
# print(Fore.WHITE, file = stream)
exit
(
1
)
exit
(
1
)
print
()
print
()
compResultFile
=
"result_comparation.html"
compResultFile
=
"result_comparation.html"
if
os
.
path
.
isfile
(
compResultFile
):
if
os
.
path
.
isfile
(
compResultFile
):
os
.
remove
(
compResultFile
)
os
.
remove
(
compResultFile
)
execFile
=
"app.exe"
if
os
.
path
.
isfile
(
execFile
):
os
.
remove
(
execFile
)
execFile
=
"*.o"
if
os
.
path
.
isfile
(
execFile
):
os
.
remove
(
execFile
)
execResult
=
os
.
system
(
"make"
)
if
execResult
!=
0
:
errorInfo
=
"应用程序异常,返回值:{0}。"
.
format
(
execResult
)
outputPromptInfo
(
bIncludeCi
,
errorInfo
,
2
)
# if bIncludeCi :
# print(red(errorInfo))
# else:
# print(Fore.RED + "应用程序异常,返回值:{0}。".format(execResult), file = stream, end='')
# print(Fore.WHITE, file = stream)
exit
(
1
)
else
:
promptInfo
=
"项目生成成功,分数:{0}。"
.
format
(
60
)
outputPromptInfo
(
bIncludeCi
,
promptInfo
,
1
)
# if bIncludeCi :
# print(green("项目生成成功,分数:{0}。".format(60)))
# else:
# print(Fore.GREEN + "项目生成成功,分数:{0}。".format(60), file = stream, end='')
# print(Fore.WHITE, file = stream)
# 获取case的数量
caseCount
=
1
while
1
:
outputFile
=
"output{0}.txt"
.
format
(
caseCount
)
if
not
os
.
path
.
isfile
(
outputFile
):
caseCount
-=
1
break
caseCount
+=
1
seqNum
=
1
seqNum
=
1
while
1
:
while
1
:
inputFile
=
"input{0}.txt"
.
format
(
seqNum
)
inputFile
=
"input{0}.txt"
.
format
(
seqNum
)
outputFile
=
"output{0}.txt"
.
format
(
seqNum
)
outputFile
=
"output{0}.txt"
.
format
(
seqNum
)
useroutputFile
=
"user_output{0}.txt"
.
format
(
seqNum
)
useroutputFile
=
"user_output{0}.txt"
.
format
(
seqNum
)
if
seqNum
==
1
and
not
os
.
path
.
isfile
(
outputFile
):
if
seqNum
==
1
and
not
os
.
path
.
isfile
(
outputFile
):
promptInfo
=
"该项目未提供自动化验证功能"
if
bIncludeCi
:
print
(
red
(
promptInfo
))
else
:
print
(
Fore
.
RED
+
"该项目未提供自动化验证功能"
,
file
=
stream
,
end
=
''
)
print
(
Fore
.
RED
+
"该项目未提供自动化验证功能"
,
file
=
stream
,
end
=
''
)
print
(
Fore
.
WHITE
,
file
=
stream
)
print
(
Fore
.
WHITE
,
file
=
stream
)
break
break
...
@@ -140,26 +223,28 @@ if __name__ == "__main__":
...
@@ -140,26 +223,28 @@ if __name__ == "__main__":
break
break
print
(
"正在使用文件 {0} 验证 case{1}"
.
format
(
inputFile
,
seqNum
))
print
(
"正在使用文件 {0} 验证 case{1}"
.
format
(
inputFile
,
seqNum
))
runCommand
=
"./app.exe < {0} > {1}"
.
format
(
inputFile
,
useroutputFile
)
if
platform
.
system
()
.
lower
()
==
'windows'
:
if
platform
.
system
()
.
lower
()
==
'windows'
:
runCommand
=
"make && app.exe < {0} > {1}"
.
format
(
inputFile
,
useroutputFile
)
runCommand
=
"app.exe < {0} > {1}"
.
format
(
inputFile
,
useroutputFile
)
elif
platform
.
system
()
.
lower
()
==
'linux'
:
runCommand
=
"make && ./app.exe < {0} > {1}"
.
format
(
inputFile
,
useroutputFile
)
execResult
=
os
.
system
(
runCommand
)
execResult
=
os
.
system
(
runCommand
)
if
execResult
!=
0
:
if
execResult
!=
0
:
print
(
Fore
.
RED
+
"应用程序异常,返回值:{0}。"
.
format
(
execResult
),
file
=
stream
,
end
=
''
)
errorInfo
=
"应用程序异常,返回值:{0}。"
.
format
(
execResult
)
print
(
Fore
.
WHITE
,
file
=
stream
)
outputPromptInfo
(
bIncludeCi
,
errorInfo
,
2
)
break
# if bIncludeCi :
# print(red(errorInfo))
# else:
# print(Fore.RED + "应用程序异常,返回值:{0}。".format(execResult), file = stream, end='')
# print(Fore.WHITE, file = stream)
exit
(
1
)
if
os
.
path
.
isfile
(
outputFile
)
and
os
.
path
.
isfile
(
useroutputFile
):
if
os
.
path
.
isfile
(
outputFile
)
and
os
.
path
.
isfile
(
useroutputFile
):
if
compare_file
(
outputFile
,
useroutputFile
,
seqNum
)
==
0
:
if
compare_file
(
outputFile
,
useroutputFile
,
seqNum
,
caseCount
)
==
0
:
print
(
"正在使用浏览器打开文件比较结果,可帮助用户查找验证失败的原因。"
)
runCommand
=
"code --diff {0} {1}"
.
format
(
outputFile
,
useroutputFile
)
print
(
Fore
.
RED
+
"注意:如果读者是在jupyterlab中完成实验,请使用以下方式打开文件比较结果:
\n
选择View菜单中的Explorer菜单项,在打开的文件列表中,右击result_comparation.html文件,
\n
在弹出的菜单中选择“Open Preview”菜单项,可以打开文件比较结果,可帮助用户查找验证失败的原因。"
)
if
bIncludeCi
:
runCommand
=
"diff {0} {1} -b -B -y -i -W 100"
.
format
(
outputFile
,
useroutputFile
)
execResult
=
os
.
system
(
runCommand
)
# print("正在使用浏览器打开文件比较结果,可帮助用户查找验证失败的原因。")
# 使用浏览器打开比较结果页面
# 使用浏览器打开比较结果页面
webbrowser
.
open
(
'file://'
+
os
.
path
.
realpath
(
compResultFile
))
#
webbrowser.open('file://' + os.path.realpath(compResultFile))
break
exit
(
1
)
seqNum
=
seqNum
+
1
seqNum
=
seqNum
+
1
\ No newline at end of file
\ No newline at end of file
编写
预览
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论