当我运行parsePlotSens.py -s bw hehe
时,它说hehe
是一个无法识别的参数。但是,如果我运行parsePlotSens.py hehe -s bw
,就可以了。理想情况下,我希望它对这两种情况都有效。
有什么提示吗?下面是我的代码:
if __name__ == '__main__' :
parser = argparse.ArgumentParser(prog='parsePlotSens');
parser.add_argument('-s', '--sort', nargs =1, action = 'store', choices = ['mcs', 'bw'], default='mcs', help=sorthelp)
parser.add_argument('filename', nargs ='+', action = 'store')
option = parser.parse_args(sys.argv)
6条答案
按热度按时间i7uq4tfw1#
不要将
sys.argv
作为参数传递给parse_args
。只是用如果将
sys.argv
传递给parse_args
,则脚本本身的路径或名称是sys.argv
中的第一项,因此成为option.filename
的值。然后hehe
变成未知参数。如果省略
sys.argv
,则parse_args
会按预期解析sys.argv
。92dk7w1h2#
您可以通过允许未知参数来解决这个问题
取代
与
72qzrwbm3#
此外,作为对unutbu答案的补充,将参数存储在字典中的这种方式使测试变得容易:
打印字典:
比如:
0g0grzrc4#
我的情况和问题不一样,但错误是一样的。
我的情况:
1.我有一个远程开发(SFTP)与windows pycharm,并上传运行与Linux.
1.在我bash文件中,python命令有一些带有
\
的换行符,如并引发
python argparse: unrecognized arguments
args not found错误。问题是Bash文件换行在Windows和Linux中是不同的,
使用pycharm
File -> Line Separators -> LF - Unix and OS X (\n)
进行设置上传到Linux并运行bash文件,它工作!
6pp0gazn5#
为了完成这个answer,我在这里提供了一个示例来获取和解析未知参数:
unknown
返回类似["--unknown", "bar", "--flag"]
的列表。我们只需要解析它:k5ifujac6#
非常有用的线程。我的问题和@Yan Zhu差不多,@unutbu和@FacePalm的回答都很好,但我也需要接受argv。我想出了这个方法,觉得很好,因为它允许我编写不需要sys.argv参数的单元测试。
当你从intellij中添加一个运行时参数时,像这样的
-a 'a from intellij'
,结果看起来是这样的。你可以看到argparse并没有删除q,但它也没有解析它。
此外,经过大量的脑力劳动和测试,sys.argv和创建的列表之间的唯一真实的区别是
sys.argv[0]
是被调用程序的名称。把它从列表中删除,这并不重要。