Я не уверен, как извлечь имя файла из контрольной суммы sha256 в Python 3 - PullRequest
1 голос
/ 08 мая 2020

Я все еще 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 (), но когда я запустил код, он все еще был там, я также попытался добавить путь к файлу в конец первой контрольной суммы в качестве теста, но это также не добавит путь к файлу в его конец. Я точно знаю, что контрольные суммы совпадают

Любая идея, что не так, любая помощь будет оценена.

1 Ответ

0 голосов
/ 08 мая 2020

Из документации, subprocess.call выполняет: Выполнить команду с аргументами. Дождитесь завершения команды или тайм-аута, затем верните атрибут кода возврата. Вы можете проверить это в оболочке python, введя help(subprocess.call) или посмотрев на https://docs.python.org и выполнив поиск subprocess модуль.

Ваш код преобразует целочисленный код возврата в строку, а не в контрольную сумму. В подпроцессе есть и другие вызовы, которые захватывают стандартный вывод процесса, куда 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!!!")
...