Python 为函数提供参数,并以正确的方式加载函数

Python 为函数提供参数,并以正确的方式加载函数,python,function,arguments,Python,Function,Arguments,我对python和编程都是新手。也许你可以在以下方面帮助我: 我有两个文件:warmaker.py和functions.py 我有两个问题 当我对inputfile使用参数-i时,如何将此变量的值(例如test.zip)传递给我的函数unzip() 如何以正确的方式调用函数 warmaker.py def main(argv): try: opts, args = getopt.getopt(argv, "hi:o:d", ["help", "ifile=", "ofil

我对python和编程都是新手。也许你可以在以下方面帮助我:

我有两个文件:warmaker.py和functions.py

我有两个问题

  • 当我对inputfile使用参数-i时,如何将此变量的值(例如test.zip)传递给我的函数unzip()
  • 如何以正确的方式调用函数
  • warmaker.py

    def main(argv):
        try:
            opts, args = getopt.getopt(argv, "hi:o:d", ["help", "ifile=", "ofile="])
        except getopt.GetoptError:
            functions.usage()
            sys.exit(2)
    
        for opt, arg in opts:
            if opt in ("-h", "--help"):
                functions.usage()
                sys.exit()
            elif opt in '-d':
                global _debug
            elif opt in ("-i", "--ifile"):
                global ifile
                ifile = arg
            elif opt in ("-o", "--ofile"):
                global ofile
                ofile = arg
    
        functions.unzip(ifile)
    
    if __name__ == "__main__":
        main(sys.argv[2:])
    
    import os
    import zipfile
    import sys
    
    def usage():
        print "\nHow to use warmaker.py"
        print 'Usage: ' + sys.argv[0] + ' -i <inputfile> -o <outputfile> '
    
    
    def unzip(ifile):
        print 'Before' + ifile
        ifile = os.path.splitext(ifile)[0] + ".zip"
        print 'after' + ifile
        print 'Changing extension from ' + ifile + 'to ' + ifile
        print '\nStart to unzip ' + ifile
        print " ..."
        extract = zipfile.ZipFile(ifile)
        extract.extractall('.')
        print ifile + 'successfully extracted'
        extract.close()
    
    函数.py

    def main(argv):
        try:
            opts, args = getopt.getopt(argv, "hi:o:d", ["help", "ifile=", "ofile="])
        except getopt.GetoptError:
            functions.usage()
            sys.exit(2)
    
        for opt, arg in opts:
            if opt in ("-h", "--help"):
                functions.usage()
                sys.exit()
            elif opt in '-d':
                global _debug
            elif opt in ("-i", "--ifile"):
                global ifile
                ifile = arg
            elif opt in ("-o", "--ofile"):
                global ofile
                ofile = arg
    
        functions.unzip(ifile)
    
    if __name__ == "__main__":
        main(sys.argv[2:])
    
    import os
    import zipfile
    import sys
    
    def usage():
        print "\nHow to use warmaker.py"
        print 'Usage: ' + sys.argv[0] + ' -i <inputfile> -o <outputfile> '
    
    
    def unzip(ifile):
        print 'Before' + ifile
        ifile = os.path.splitext(ifile)[0] + ".zip"
        print 'after' + ifile
        print 'Changing extension from ' + ifile + 'to ' + ifile
        print '\nStart to unzip ' + ifile
        print " ..."
        extract = zipfile.ZipFile(ifile)
        extract.extractall('.')
        print ifile + 'successfully extracted'
        extract.close()
    
    导入操作系统
    进口拉链
    导入系统
    def用法():
    打印“\n如何使用warmaker.py”
    打印“用法:'+sys.argv[0]+'-i-o”
    def解压缩(ifile):
    打印“之前”+ifile
    ifile=os.path.splitext(ifile)[0]+“.zip”
    打印'after'+ifile
    打印“将扩展名从“+ifile+”更改为“+ifile”
    打印“\n开始解压”+ifile
    打印“…”
    extract=zipfile.zipfile(ifile)
    extract.extractall('.'))
    打印ifile+“已成功提取”
    extract.close()
    
    也许你能帮我


    这是控制台上的输出:

    root@osboxes:~/PycharmProjects/warmaker# python warmaker.py -i CS_A3.war 
    Before
    after.zip
    Changing extension from .zipto .zip
    
    Start to unzip .zip
     ...
    Traceback (most recent call last):
      File "warmaker.py", line 33, in <module>
        main(sys.argv[2:])
      File "warmaker.py", line 30, in main
        functions.unzip(ifile)
      File "/root/PycharmProjects/warmaker/functions.py", line 17, in unzip
        extract = zipfile.ZipFile(ifile)
      File "/usr/lib/python2.7/zipfile.py", line 756, in __init__
        self.fp = open(file, modeDict[mode])
    IOError: [Errno 2] No such file or directory: '.zip'
    
    root@osboxes:~/PycharmProjects/warmaker#python warmaker.py-i CS_A3.war
    之前
    after.zip
    将扩展名从.zipto.zip更改为
    开始解压
    ...
    回溯(最近一次呼叫最后一次):
    文件“warmaker.py”,第33行,在
    main(sys.argv[2:])
    文件“warmaker.py”,第30行,主
    functions.unzip(ifile)
    文件“/root/PycharmProjects/warmaker/functions.py”,第17行,解压缩
    extract=zipfile.zipfile(ifile)
    文件“/usr/lib/python2.7/zipfile.py”,第756行,在__
    self.fp=open(文件,modeDict[mode])
    IOError:[Errno 2]没有这样的文件或目录:'.zip'
    

    如您所见,在单词“Before”之后必须有varibale“ifile”的值,但没有

    这是控制台上的输出:

    root@osboxes:~/PycharmProjects/warmaker# python warmaker.py -i CS_A3.war 
    Before
    after.zip
    Changing extension from .zipto .zip
    
    Start to unzip .zip
     ...
    Traceback (most recent call last):
      File "warmaker.py", line 33, in <module>
        main(sys.argv[2:])
      File "warmaker.py", line 30, in main
        functions.unzip(ifile)
      File "/root/PycharmProjects/warmaker/functions.py", line 17, in unzip
        extract = zipfile.ZipFile(ifile)
      File "/usr/lib/python2.7/zipfile.py", line 756, in __init__
        self.fp = open(file, modeDict[mode])
    IOError: [Errno 2] No such file or directory: '.zip'
    
    root@osboxes:~/PycharmProjects/warmaker#python warmaker.py-i CS_A3.war
    之前
    after.zip
    将扩展名从.zipto.zip更改为
    开始解压
    ...
    回溯(最近一次呼叫最后一次):
    文件“warmaker.py”,第33行,在
    main(sys.argv[2:])
    文件“warmaker.py”,第30行,主
    functions.unzip(ifile)
    文件“/root/PycharmProjects/warmaker/functions.py”,第17行,解压缩
    extract=zipfile.zipfile(ifile)
    文件“/usr/lib/python2.7/zipfile.py”,第756行,在__
    self.fp=open(文件,modeDict[mode])
    IOError:[Errno 2]没有这样的文件或目录:'.zip'
    

    如您所见,在单词“Before”之后必须有varibale“ifile”的值,但warmaker.py中没有,您有

    if __name__ == "__main__":
        main(sys.argv[2:])
    
    换成

    if __name__ == "__main__":
        main(sys.argv[1:])
    
    这些选项从sys.argv[1]开始


    sys.argv[0]是Python文件的名称。

    在warmaker.py中,您有

    if __name__ == "__main__":
        main(sys.argv[2:])
    
    换成

    if __name__ == "__main__":
        main(sys.argv[1:])
    
    这些选项从sys.argv[1]开始

    sys.argv[0]是Python文件的名称。

    我将编辑它以使用它(这是主要的api参考;它在顶部附近还有一个指向更适合初学者的教程的链接),而不是optparse,因为文档中说optparse不推荐使用

    您已经设置好使用一个主函数&if uu name uu=='uuu main uu'习惯用法,这很好,但这里并不真正需要它,所以我在编辑中简化了内容。如果将warmaker.py代码与functions.py代码放在一个单独的文件(又称模块)中,那么您可能希望使用If _uname _u=='_umain uuu',这样您就可以导入函数,而不必使用warmaker.py主函数中运行的代码,但这样也可以使用w/out

    温和派

    函数.py

    导入操作系统
    进口拉链
    导入系统
    def用法():
    打印“\n如何使用warmaker.py”
    打印“用法:”
    打印'python'+sys.argv[0]+'-i-o'
    #请注意,在python中,如果连接一个字符串然后打印它,则必须自己添加空格字符
    def解压(ifile,outdir='.'):
    打印“解压缩”,ifile
    prev_content=set(os.listdir(outdir))
    打印“…”
    使用zipfile.zipfile(ifile)作为efile:
    efile.extractall(outdir)
    添加内容=设置(os.listdir(outdir))-上一个内容
    打印ifile,“已成功提取”
    #默认情况下,对以逗号分隔的变量调用print会打印以空格分隔的变量
    打印“提取内容:”
    对于n,枚举中的名称(添加内容):
    打印n+1,名称
    
    另外,我将它改为可以指定输出目录而不是文件&我添加了一些代码来显示添加了哪些新文件/dir,正如我所想的那样。给出一个输出文件似乎与ZipFile上的文档所说的使用extractall方法可以做的事情不太匹配。如果这是一种仅对压缩的单个文件进行操作的自定义用法&需要以这种方式工作,则需要对functions.py进行大量更改

    总的来说,对于一些编程新手来说,这是非常可靠的代码。很好的工作

    我会编辑它以使用它(这是主要的api参考;它在顶部附近还有一个指向更适合初学者的教程的链接),而不是optparse,因为文档中说optparse不推荐使用

    您已经设置好使用一个主函数&if uu name uu=='uuu main uu'习惯用法,这很好,但这里并不真正需要它,所以我在编辑中简化了内容。如果将warmaker.py代码与functions.py代码放在一个单独的文件(又称模块)中,那么您可能希望使用If _uname _u=='_umain uuu',这样您就可以导入函数,而不必使用warmaker.py主函数中运行的代码,但这样也可以使用w/out

    温和派

    函数.py

    导入操作系统
    进口拉链
    导入系统
    def用法():
    打印“\n如何使用warmaker.py”
    打印“用法:”
    打印'python'+sys.argv[0]+'-i-o'
    #请注意,在python中,如果连接一个字符串然后打印它,则必须自己添加空格字符
    def解压(ifile,outdir='.'):
    打印“解压缩”,ifile
    prev_content=set(os.listdir(outdir))
    打印“…”
    使用zipfile.zipfile(ifile)作为ef