我不知道如何在Python 3中从sha256校验和中取出文件名。

问题描述 投票:1回答:1

我还是个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()用各种方法去掉它,但当我运行这段代码时,它仍然在那里,我还试着在第一个校验结果的末尾添加文件路径作为测试,但这也不会在它的末尾添加文件路径。

任何想法是什么问题,任何帮助将被感激。

python checksum
1个回答
0
投票

来自文档。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!!!")
© www.soinside.com 2019 - 2024. All rights reserved.