2017-04-20 114 views
1

我有一个完美的工作,并使用argparse的一段代码。我一直在使用它几个月的工作没有任何问题。下面是一个例外。蟒蛇argparse停止工作

import argparse 
import sys 
import math 
import random 

# Setup command line arguments 
parser = argparse.ArgumentParser(description='RF Profile Generator', formatter_class=argparse.ArgumentDefaultsHelpFormatter) 
parser.add_argument('-o', dest='OutputFile', help='Output filename', required=True, type=argparse.FileType('w', encoding='utf-8')) 
parser.add_argument('-a', dest='APPositions', nargs='+', type=float, help='Trackside AP position(s)', required=True) 
parser.add_argument('-l', dest='TotalTrackLength', type=float, help='Length of the track (m)', required=True) 
parser.add_argument('-p', dest='AttenuatorAddr', nargs='+', help='Programmable attenuator IP address(es)', required=True) 

input("A") 
# parse the command line arguments 
# the parsed values will be stored in the corresponding variables defined by 'dest' 
args = parser.parse_args() 
input("B") 
#More code to follow 

不过,我跑了代码今天以以下的参数(这是我一直以来的做):

rf.py -o OutputFile -a 10 20 30 40 -l 600 -p 10.0.1.55 

和控制台输出告诉我

"error: the following arguments are required: -o, -a, -l, -p" 

我做不明白为什么这已停止工作。为了排除故障,我添加了2个输入命令,但代码永远不会到达input("B") 有人请告诉我这可能发生的一个可能的原因。 python的版本是3.4.1,并且在我上次运行此代码和现在运行之间还没有更新过。

非常感谢您

+0

这很明显,_something_已经改变 - 除非你订阅货物崇拜信仰! – holdenweb

+0

它在Python 3.6上为我工作 –

+0

定义_“工作”_ - 参数规范清楚地表明参数_are_是必需的。 – holdenweb

回答

1

由于required=True存在于所有的调用add_argument,我的结论是:要么

  • 别人改变了你的程序,或
  • 这是第一次你已经尝试运行它,但没有提供这些参数

但是,我确实觉得runni很奇怪与--help选项纳克程序提供了以下的输出:

usage: so16.py [-h] -o OUTPUTFILE -a APPOSITIONS [APPOSITIONS ...] -l 
       TOTALTRACKLENGTH -p ATTENUATORADDR [ATTENUATORADDR ...] 

RF Profile Generator 

optional arguments: 
    -h, --help   show this help message and exit 
    -o OUTPUTFILE   Output filename (default: None) 
    -a APPOSITIONS [APPOSITIONS ...] 
         Trackside AP position(s) (default: None) 
    -l TOTALTRACKLENGTH Length of the track (m) (default: None) 
    -p ATTENUATORADDR [ATTENUATORADDR ...] 
         Programmable attenuator IP address(es) (default: None) 

我困惑的是,为什么该消息意味着,所需的参数为可选。

+0

感谢您输入@holdenweb。对于你的第一点,这是不可能的,因为这个.py文件存储在我的电脑中,并且没有其他人访问。对于第二点,对此脚本的调用存储在.bat文件中,并且只在需要时才更改.bat文件上的输入参数。脚本保持不变。在我今天遇到问题后,我回到了一个前卫的.bat文件(它运行良好),它给了我同样的错误信息。 – Muffi

+0

为了澄清,我提供了所有必需的参数,当我调用该程序:rf.py -o OutputFile -a 10 20 30 40 -l 600 -p 10.0.1.55 – Muffi

+0

如果这是Windows命令和.bat问题,请确保'%1%2'等符号是正确的。在Windows上传递命令行参数一直比在Linux上要逊色。 – hpaulj