Контрольная сумма python md5 с argv, вызываемым из main.py

Ссылка с моим кодом для проверки md5 из двух источников в моей ссылке:

Python сохраняет выходные данные для итерации и подпроцесса для контрольной суммы

Я добиваюсь получения md5 соответственно. (Любые улучшения всегда приветствуются) вот мой код:

#!/usr/bin/env python

import logging
import hashlib
import os
import sys
from sys import *
import subprocess

#script, path, path2 = argv

outfile = "md5_origen.txt"
outfile2 = "md5_destino.txt"
cmdargs = sys.argv
total = len(sys.argv) -1

#EJEMPLO PARA SACAR LOS ARGUMENTOS
################
#for a in cmdargs[1:]:
#       print  a
################        

def saca_sum_origen(y):
        #si cambia de directorio, que cambio de archivo para despues ser evaluado.
        if a != sys.argv[total]: 
                ck = "md5 %s/%s" % (a,y)
                p = subprocess.Popen(ck, stdout=subprocess.PIPE, shell=True)
                (output, err) = p.communicate()
                with open(outfile,'a') as text_file:
                        text_file.write("%s" % output)
        else:
                ck = "md5 %s/%s" % (a,y)
                p = subprocess.Popen(ck, stdout=subprocess.PIPE, shell=True)
                (output, err) = p.communicate()
                with open(outfile2,'a') as text_file:
                        text_file.write("%s" % output)

#obtenemos los argumentos
for a in cmdargs[1:]:
        #esto es que cada directorio enliste los files que tiene adentro
        for x in (file for file in os.listdir(a)):
                if not "~" in x:
                        #que obtenga su MD5
                        saca_sum_origen(x)

Хотите знать, как я могу начать создавать меню из другого скрипта Python.

Мой первый подход заключается в следующем:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import os
from sys import *
import sys
import subprocess
import cksum_v2
borrar = os.system('clear')

opcion = True
    while opcion:
            print "Select an option: \n"
            print "1. Create a md5 report from source and target only"
            try:
                    opcion = int(raw_input(">_ "))
                    if opcion == 1:
                            print "Jot down your input folder"
                            origen  = raw_input()
                            print "Now your output folder"
                            destino = raw_input()
                            subprocess.call(["./cksum_v2.py", origen, destino])
                            borrar
                            print "Done!"
                            print "¿Want an other? y/n"
                            try:
                                    descicion = str(raw_input(">_ "))       
                                    if descicion == "y":
                                            opcion = True
                                    elif descicion == "n":
                                            print "BYE"
                                            opcion = False
                                    else:
                                            print "ADIOS!!!"
                                            opcion = False
                            except:
                                    borrar
                                    print "BYE"
                                    opcion = False

                    elif opcion >1 or opcion <4:
                            os.system('clear')
                            print "Under construction"
                            opcion = True
                    elif  opcion >5:
                            print "Doesnt exist that option, an other?"
                            opcion = True
            except:
                    print "DOnt get mad, BYE touchy!!"
                    opcion = False

1 ответ

Решение

Похоже, вы хотите позвонить saca_sum_origen с источником и назначением, и сейчас он просто принимает 1 аргумент для источника. Функция просто должна быть изменена, чтобы получить эти аргументы:

(Я немного упростил это здесь)

def saca_sum_origen(source, dest):
    ck = "md5 %s" % source
    p = subprocess.Popen(ck, stdout=subprocess.PIPE, shell=True)
    (output, err) = p.communicate()
    with open(dest,'a') as text_file:
    text_file.write(str(output))

Тогда просто замени эту строку subprocess.call(["./cksum_v2.py", origen, destino]) с cksum_v2.saca_sum_origen(origen, destino)

Кстати, похоже, что вы пытаетесь сделать "ярлык" для функции с этой строкой borrar = os.system('clear'), Все, что это делает, это назначает вывод os.system('clear')(что ничего) к переменной borrarи затем, когда вы пытаетесь "вызвать" его в коде меню, он на самом деле ничего не делает. Если вы действительно хотите создать функцию "псевдоним", вы можете сделать ее функцией: def borrar: os.system('clear')и не забывайте скобки, когда вы называете это: borrar()

Другие вопросы по тегам