Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.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程序_Python_Python 2.7 - Fatal编程技术网

如何在具有不同输入可能性的命令行上运行python程序

如何在具有不同输入可能性的命令行上运行python程序,python,python-2.7,Python,Python 2.7,如果用户不知道c,并且a=3和b=2,我想这样调用程序: $ python my_program 3 2 $ python my_program -c 6 如果用户知道c并且c=9,我想这样调用程序: $ python my_program 3 2 $ python my_program -c 6 由于由c=results.a+results.b表示的计算大约需要30分钟才能完成,如果c已知,我希望能够跳过它 这可能吗?下面我有两个不同的代码示例,但这并不是我想要的 代码示例1 impo

如果用户不知道c,并且a=3和b=2,我想这样调用程序:

$ python my_program 3 2
$ python my_program -c 6
如果用户知道c并且c=9,我想这样调用程序:

$ python my_program 3 2
$ python my_program -c 6
由于由
c=results.a+results.b
表示的计算大约需要30分钟才能完成,如果c已知,我希望能够跳过它

这可能吗?下面我有两个不同的代码示例,但这并不是我想要的

代码示例1

import argparse

def my_function():

    if results.c == 0:
        c = results.a + results.b
        d = c + 5

    else:
        d = results.c + 5


if __name__=='__main__':

    parser = argparse.ArgumentParser()

    parser.add_argument('a', action="store", type=int)
    parser.add_argument('b', action="store", type=int)
    parser.add_argument('-c', action="store", default=0, type=int)

    results = parser.parse_args()

    my_function()
我的代码示例1所需调用为:

$python我的程序3 2

$python my_program 32-c6

代码示例2

import argparse

def my_function():

    if results.c == 0:
        c = results.a + results.b
        d = c + 5

    else:
        d = results.c + 5


if __name__=='__main__':

    parser = argparse.ArgumentParser()

    parser.add_argument('-a', action="store", default=0, type=int)
    parser.add_argument('-b', action="store", default=0, type=int)
    parser.add_argument('-c', action="store", default=0, type=int)

    results = parser.parse_args()

    my_function()
我的代码示例2所需调用为:

$python我的程序-a3-b2

$python我的程序-c6


谢谢你的帮助。祝你今天愉快

您必须使所有参数都是可选的,并自己验证它们:

ap=argparse.ArgumentParser()

ap.add_argument('-c', required=False)
ap.add_argument('a', nargs='?')
ap.add_argument('b', nargs='?')

args = ap.parse_args()

if (args.c is not None):
    # process c
elif (args.a is not None and args.b is not None):
    # process a and b
else:
    # validation errors
如果您愿意将
a
b
作为一个单独的命名参数而不是位置,您可以使用它来完成此操作。互斥组要求其中的所有参数都是可选的,而命名参数只能是必需的

ap=argparse.ArgumentParser()

g = ap.add_mutually_exclusive_group(required=True)
g.add_argument('-ab', nargs=2, required=False)
g.add_argument('-c', required=False)

args = ap.parse_args()

print('args={}'.format(repr(args)))

if (args.c is not None):
    # process c
elif (args.ab is not None):
    a, b = args.ab
    # process a and b
else:
    raise Exception("should never get here")
在第一个示例中,是否为所有参数设置?另外,对于
a
b
,我会使用一个
add_参数('ab',nargs=2)