Python3 argparse:将字符串作为arg run funcA传递时,如果为虚线arg,则运行另一个func 以下是我试图实现的目标:
将字符串作为参数传递时,调用write_text()函数Python3 argparse:将字符串作为arg run funcA传递时,如果为虚线arg,则运行另一个func 以下是我试图实现的目标:,python,python-3.x,argparse,Python,Python 3.x,Argparse,将字符串作为参数传递时,调用write_text()函数 python3 app.py将此文本写入文件 传递虚线参数时,调用另一个函数,在本例中为read_text() python3 app.py-r 当不传递参数时,打印帮助 python3 app.py 以下是我目前掌握的情况: 问题是,当我只调用-r时,它会抱怨缺少text的命令,因为text不是可选参数 我已经尝试创建子命令并生成所有args子命令,但是需要显式调用text参数,如python3 app.py text 我可能想得太多
python3 app.py将此文本写入文件
传递虚线参数时,调用另一个函数,在本例中为read_text()
python3 app.py-r
当不传递参数时,打印帮助
python3 app.py
以下是我目前掌握的情况: 问题是,当我只调用
-r
时,它会抱怨缺少text
的命令,因为text
不是可选参数
我已经尝试创建子命令并生成所有args子命令,但是需要显式调用text
参数,如python3 app.py text
我可能想得太多了,忽略了一个简单的解决方案。在解析sys.argv时,我就让它工作得很好,但它并不漂亮。内置的帮助功能也很有用
提前谢谢
编辑: 这是我现在拥有的有用的东西
parser = argparse.ArgumentParser()
parser.add_argument('text', nargs='*', help="write text to file")
parser.add_argument('-r', '--read', action='store_true', help="read text from file")
args = parser.parse_args()
...
def main():
if args.read:
read_text()
elif args.text:
text = " ".join(args.text)
write_text(text)
else:
parser.print_help()
仍然认为有一种更干净的方法可以做到这一点…这可能会有所帮助:
parser.add_argument('text', nargs='?', help="write text to file")
更多信息:
请注意,如果以后要将args.read用作布尔值,则应该对read参数使用
action='store\u true'
parser.add_argument('-r', '--read', action='store_true', help="read text from file")
这可能有助于:
parser.add_argument('text', nargs='?', help="write text to file")
更多信息:
请注意,如果以后要将args.read用作布尔值,则应该对read参数使用
action='store\u true'
parser.add_argument('-r', '--read', action='store_true', help="read text from file")
谢谢大家!
action='store\u true'
对-r
参数起作用。然而,在将nargs='?'
添加到文本参数后,当向程序传递一个由4个单词组成的字符串时,我遇到了一个无法识别的参数错误。当使用nargs='*'
时,它创建了一个列表,然后我可以将该列表组合成一个字符串并传递给我的函数。不要让脚本猜测如何加入多个参数将参数转换为字符串:要显式,并且自己执行:python3 app.py“将此文本写入文件”
。谢谢action='store\u true'
对-r
参数起作用。然而,在将nargs='?'
添加到文本参数后,当向程序传递一个由4个单词组成的字符串时,我遇到了一个无法识别的参数错误。当使用nargs='*'
时,它创建了一个列表,然后我可以将该列表组合成一个字符串并传递给我的函数。不要让脚本猜测如何加入多个参数将参数转换为字符串:显式,自己完成:python3 app.py“将此文本写入文件”
。那么,您的问题解决了吗?是的,谢谢@cdrom我将您的答案标记为已接受。那么,您的问题解决了吗?是的,谢谢@cdrom我将您的答案标记为已接受。