带有从 main.py 调用的 argv 的 python 校验和 md5 [英] python checksum md5 with argv called from a main.py

查看:20
本文介绍了带有从 main.py 调用的 argv 的 python 校验和 md5的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

参考我的代码来检查链接中两个来源的 md5:

Is reference with my code to check the md5 from two sources in my link:

python 保存迭代的输出和子进程校验和

我分别获得了 md5.(任何改进总是受欢迎的)这是我的代码:

I achieve getting md5 respectively. (Any improvements are always welcome) here is my code:

#!/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

推荐答案

看起来你想用一个源和一个目的地调用 saca_sum_origen,现在它只需要 1 个参数作为源.该函数只需要修改为采用这些参数:

It looks like you want to call saca_sum_origen with a source and a destination, and right now it just takes 1 argument for the source. The function just needs to be modified to take those arguments:

(我在这里简化了一点)

(I simplified it a bit here)

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)

Then just replace this line subprocess.call(["./cksum_v2.py", origen, destino]) with cksum_v2.saca_sum_origen(origen, destino)

顺便说一句,您似乎正在尝试使用此行 borrar = os.system('clear') 为函数创建快捷方式".所有这一切都是将 os.system('clear') 的输出(什么都没有)分配给变量 borrar,然后当你试图在您的菜单代码中调用"它,它实际上什么也没做.如果你真的想创建一个别名"函数,你可以把它变成一个函数:def borrar: os.system('clear'),并且调用时不要忘记括号:borrar()

By the way, it looks like you're trying to make a "shortcut" for a function with this line borrar = os.system('clear'). All this does is assigns the output of os.system('clear'), (which is nothing) to the variable borrar, and then when you're trying to "call" it within your menu code, it's actually not doing anything. If you really want to create an "alias" function, you can make it a function: def borrar: os.system('clear'), and don't forget the parenthesis when you call it: borrar()

这篇关于带有从 main.py 调用的 argv 的 python 校验和 md5的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆