0

我有一个程序,可以这样运行。

./program -i /path -o /path -nomore

-nomore参数是可选的。如果你输入它,它会隐藏一些输出信息,如果你不输入,它不会(所以默认是不隐藏输出信息)。我制作了一个 python 脚本来运行这个程序。所以:myscript.py -i /path/ -o/path -nomore 这就是我想要实现的。

import argparse, subprocess
parser.add_argument("-i","--query", type=str, required=True)
parser.add_argument("-d","--database", type=str, required=True)
parser.add_argument('-nomore','--nomore')
args = parser.parse_args()
if args.nomore:
    print 'nomore activated'
subprocess.call("program -i %s -o %s %s "  % (args.query, args.database, args.nomore,),shell=True ) 

问题是我是否-nomore选择了选项,唯一改变的是打印了“不再激活”,没有任何功能变化。

我也试过

parser.add_argument('-nomore','--nomore',action=store_true)

但是我得到了:Uknown option true ignored,当我输入命令行时-noconsunknown option false ignored当我没有输入时。

4

1 回答 1

0

好的,我明白了。通过在参数中使用 action="store_const" 并设置 default=True 来解决它。

import argparse, subprocess
parser.add_argument("-i","--query", type=str, required=True)
parser.add_argument("-d","--database", type=str, required=True)
parser.add_argument('-nomore','--nomore', action='store_const', default=True)
args = parser.parse_args()
if args.nomore:
    print 'nomore activated'
subprocess.call("program -i %s -o %s %s "  % (args.query, args.database, args.nomore,),shell=True 

这解决了我的问题。在这种情况下,仍然不完全理解为什么 action='store_true' 与 action='store_const' 如此不同。

于 2013-05-17T23:13:03.047 回答