python以命令行方式输入_如何在命令行上以不同的输入方式运行python程序

这篇博客讨论了如何使用Python的argparse模块来处理命令行参数。作者希望在用户已知变量c时能直接调用程序,避免进行耗时的计算。示例代码展示了如何设置可选参数并验证输入。解决方案包括使所有参数可选,并通过检查参数是否存在来决定执行路径。
摘要由CSDN通过智能技术生成

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

$python my_program 3 2

如果用户知道c并且c = 9,我想这样调用程序:

$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 my_program 3 2

要么

$python my_program 3 2 -c 6

代码示例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 my_program -a 3 -b 2

要么

$python my_program -c 6

感谢您的任何帮助.祝你有美好的一天.

解决方法:

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

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设为单个命名参数而不是位置参数,则可以使用mutual exclusion为您执行此操作.互斥组要求它们中的所有参数都是可选的,并且仅需要命名参数.

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")

标签:python-2-7,python

来源: https://codeday.me/bug/20191123/2065675.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值