Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python argparse输入文件错误_Python_Argparse - Fatal编程技术网

Python argparse输入文件错误

Python argparse输入文件错误,python,argparse,Python,Argparse,我见过类似的问题,但没有一个解决方案适用于这种情况。我有一个argparser函数: def IO_fileParse(): parser = argparse.ArgumentParser(); parser.add_argument("-i", dest="input_file", help="no file with this name") args = parser.parse_args(); input_file = os.path.join

我见过类似的问题,但没有一个解决方案适用于这种情况。我有一个argparser函数:

def IO_fileParse():
     parser = argparse.ArgumentParser();
     parser.add_argument("-i", dest="input_file", help="no file with this name") 
     args = parser.parse_args();

     input_file = os.path.join(os.getcwd(),args.input_file)
     if not os.path.exists(input_file):
         print(" ------------------------------------------------");
         print("Error: -input_file Cannot find input file with that name.");
         print(" ------------------------------------------------");
         parser.print_help();
         sys.exit();
我想说“如果在目录中找不到具有-I名称的文件,请打印帮助并退出脚本。”

实际发生的情况是,这似乎使输入文件名为空文件

我如何更改上面的代码,说“如果-I文件不存在,告诉用户这个文件不存在”(并且不要用不存在的文件名创建一个空文件)


我也尝试过os.path.isfile和os.path.exists,都没有给出我想要的错误?…我也尝试过如果没有args.input\u文件

  • 去掉分号。他们为什么在那里
  • 您没有正确访问该变量

  • 您将它存储在一个名为-i的变量中。尝试调用-input\u文件,删除、dest,并通过args.input\u文件访问它

  • getcwd()将为您提供工作目录,而不是当前路径。获取当前路径
    os.path.dirname(os.path.abspath(“\uu文件”))

  • 我不知道你们的说法是否正确,但在我建议的结构中,用法应该是
    python test.py-input\u file filename

  • 编辑:您可以通过
    语法分析器提供速记选项和完整格式。添加参数(“-i”,“--input\u name”)

    这个代码对我有用

    def IO_fileParse():
        parser = argparse.ArgumentParser()
        parser.add_argument("-input_file", help="no file with this name")
        args = parser.parse_args()
    
        input_file = os.path.join(os.getcwd(),args.input_file)
        print(input_file)
        if not os.path.exists(input_file):
            print(" ------------------------------------------------")
            print("Error: -input_file Cannot find input file with that name.")
            print(" ------------------------------------------------")
            parser.print_help()
            sys.exit()
    
    IO_fileParse()
    

    除了一些小的调整,我认为你的脚本没有问题。这是我的测试:

    In [52]: p=argparse.ArgumentParser()    
    In [53]: p.add_argument('-i','--input-file')
    ...
    
    如果没有标记的选项,默认值为
    None
    ,路径联接不起作用。如果args.input\u文件不是None,则应为其提供有效的默认值或使用
    test

    In [54]: args=p.parse_args(''.split())    
    In [55]: args
    Out[55]: Namespace(input_file=None)
    
    In [56]: name=os.path.join(os.getcwd(),args.input_file)
    ...
    AttributeError: 'NoneType' object has no attribute 'startswith'
    
    使用现有文件名:

    In [57]: args=p.parse_args('-i test'.split())
    In [58]: args
    Out[58]: Namespace(input_file='test')
    In [59]: name=os.path.join(os.getcwd(),args.input_file)
    In [60]: name
    Out[60]: '/home/paul/test'   # valid file name
    In [61]: os.path.exists(name)
    Out[61]: True    # it exists on my system
    
    随意选择一个名字

    In [62]: args=p.parse_args('-i random'.split())
    In [63]: name=os.path.join(os.getcwd(),args.input_file)
    In [65]: os.path.exists(name)
    Out[65]: False    # it doesn't exist
    

    重复
    exists
    测试表明没有任何东西创建该文件。

    如果不是args.input\u文件,则可能重复
    ,因为它是可选的?我还尝试了os.path.isfile和os.path.exists,但都没有给我想要的错误?…我也尝试了如果不是args.input\u文件。你有调用
    open()吗
    是否为该文件设置了?我在代码中没有看到任何可以生成文件的内容。。并确保在测试之前删除该文件(如果不明显:)。通常,“-i”是短标志形式,“-input_file”(或“--input file”)是长标志形式。(一个短破折号,两个长破折号)
    dest
    是从第一个long中推导出来的,但也可能是显式给出的。谢谢你的建议,我把它完全复制到了我的代码中,现在它可以工作了。