Python argparse输入文件错误
我见过类似的问题,但没有一个解决方案适用于这种情况。我有一个argparser函数: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
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文件
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中推导出来的,但也可能是显式给出的。谢谢你的建议,我把它完全复制到了我的代码中,现在它可以工作了。