#python #python-3.x #command-line #windows-10 #powershell-2.0
#python #python-3.x #командная строка #windows-10 #powershell-2.0
Вопрос:
Я пишу очень короткую программу для проверки сумм MD5 на безопасность файлов
Я хотел бы получить путь к файлу от пользователя и ожидаемый результат от контрольной суммы из команды «CertUtil -hashfile MD5», где будет путь к файлу, введенный пользователем, затем я хотел бы получить вывод командной строки в виде строки для сравнения с ожидаемым результатом, которыйпользователь указал. Возможно ли это? Если да, то как я могу изменить приведенный ниже код, чтобы разрешить отправку пути к файлу в качестве переменной и получать выходные данные из командной строки?
Я пишу на 64-битном python 3.9.0 в Windows 10 и хотел бы избежать установки и дополнительных библиотек, если это не является абсолютно необходимым
»’
#CheckSumChecker! By Joseph
import os
#User file input
data = input("Paste Filepath Here: ")
correct_sum = ("Paste the expected output here: ")
#File hash is checked using cmd "cmd /k "CertUtil -hashfile filepath MD5"
os.system('cmd /k "CertUtil -hashfile C:Windowslsasetup.log MD5"')
if correct_sum == cmd_output:
print("The sums match!" correct_sum "=" cmd_output)
else:
print("The sums don't match! Check that your inputs were correct" correct_sum "is not equal to" cmd_output)
»’
Комментарии:
1. Не могли бы вы рассказать нам, что вы пробовали и в чем ошибка, если она есть?
Ответ №1:
Вы можете использовать subprocess.check_output
. (В вашем коде были некоторые другие ошибки, которые я исправил здесь.)
import subprocess
input_path = input("Paste Filepath Here: ")
correct_sum = input("Paste the expected output here: ")
output = (
subprocess.check_output(
["CertUtil", "-hashfile", input_path, "MD5",]
)
.decode()
.strip()
)
print("Result:", output)
if correct_sum == output:
print("The sums match!", correct_sum, "=", cmd_output)
else:
print(
"The sums don't match! Check that your inputs were correct",
correct_sum,
"is not equal to",
cmd_output,
)
Или, чтобы вообще не использовать CertUtil, используйте встроенный hashlib
модуль.
Вам нужно будет проявить некоторую осторожность, чтобы не читать весь файл в память сразу…
import hashlib
input_path = input("Paste Filepath Here: ")
correct_sum = input("Paste the expected output here: ")
hasher = hashlib.md5()
with open(input_path, "rb") as f:
while True:
chunk = f.read(524288)
if not chunk:
break
hasher.update(chunk)
output = hasher.hexdigest()
print("Result:", output)
if correct_sum == output:
print("The sums match!", correct_sum, "=", cmd_output)
else:
print(
"The sums don't match! Check that your inputs were correct",
correct_sum,
"is not equal to",
cmd_output,
)