我还是个Python新手,但我想与其手动检查校验和,不如做一个快速的程序,这样无论何时都能花更少的时间来做(也是为了练习),所以我写了这段代码(原谅我代码中多余的无用行和糟糕的命名,我是想找出我做错了什么。)
import subprocess
FileLocation = input("Enter File Location: ")
Garbage1 = str(input("Enter First Checksum: "))
Garbage2 = str(subprocess.call(['sha256sum', FileLocation]))
Garbage3 = Garbage2.split(None, 1)
if Garbage1 == Garbage3[0]:
print("all good")
else:
print("Still Not Working!!!")
当我运行这段代码时,由于Linux命令的原因,它一直在第二个校验结果的末尾留下文件路径,但我试着用.split()用各种方法去掉它,但当我运行这段代码时,它仍然在那里,我还试着在第一个校验结果的末尾添加文件路径作为测试,但这也不会在它的末尾添加文件路径。
任何想法是什么问题,任何帮助将被感激。
来自文档。subprocess.call
做。运行带有参数的命令 等待命令完成或超时,然后返回returncode属性。 你可以在python的shell中验证这一点,输入 help(subprocess.call)
或看 https:/docs.python.org。 和搜索 subprocess
模块。
你的代码将整数返回代码转换为字符串,而不是校验码。在subprocess中还有其他的调用,这些调用可以捕获进程的stdout,这也是在 sha256sum
发送其校验和。Stdout是一个 bytes
对象,需要将其解码为一个字符串。
import subprocess
FileLocation = input("Enter File Location: ")
Garbage1 = str(input("Enter First Checksum: "))
Garbage2 = subprocess.check_output(['sha256sum', FileLocation]).decode()
Garbage3 = Garbage2.split(None, 1)
if Garbage1 == Garbage3[0]:
print("all good")
else:
print("Still Not Working!!!")