使用python的argparse,如何使子命令成为必需的参数?我想这样做是因为如果没有指定子命令,我希望argparse出错.我改写错误方法来打印帮助.我有3个深度嵌套子命令,所以这不是简单地在顶层处理零参数的问题.
在下面的示例中,如果这样调用,我得到:
$./simple.py
$
Run Code Online (Sandbox Code Playgroud)
我想要它做的是让argparse抱怨没有指定所需的子命令:
import argparse
class MyArgumentParser(argparse.ArgumentParser):
def error(self, message):
self.print_help(sys.stderr)
self.exit(0, '%s: error: %s\n' % (self.prog, message))
def main():
parser = MyArgumentParser(description='Simple example')
subs = parser.add_subparsers()
sub_one = subs.add_parser('one', help='does something')
sub_two = subs.add_parser('two', help='does something else')
parser.parse_args()
if __name__ == '__main__':
main()
Run Code Online (Sandbox Code Playgroud) 我有一个文件:
header
trigger
text1
text2
trigger
text5
trigger
...
trigger
...
Run Code Online (Sandbox Code Playgroud)
我希望sed只匹配前两次'trigger'.所以我尝试过:
sed -n '/trigger/,/trigger/p'
Run Code Online (Sandbox Code Playgroud)
但是正如sed的手册页所说,它匹配两行中所有出现的'trigger'.我希望sed在第一场比赛后退出,所以输出将是:
trigger
text1
text2
trigger
Run Code Online (Sandbox Code Playgroud)
我该如何做到这一点?
是否有可能获得Plotly(在Python中使用)"严格本地"?换句话说,是否可以以保证不会因任何原因联系网络的方式使用它?
这包括试图联系Plotly服务的程序(因为那是商业模式),以及确保在生成的html中的任何地方点击都不会有Plotly或其他任何地方的链接.
当然,我希望能够在连接到网络的生产机器上执行此操作,因此不能选择拔出网络连接.
我能够构建一个完全符合我想要的公式(从一些例子中),但是,我无法弄清楚它究竟是如何工作的.我有,从单元格A1开始:
Price $
table 20
chair 10
Invoice Quantity
table 17
chair 1
chair 2
table 3
Run Code Online (Sandbox Code Playgroud)
我想要的是发票的最终总数(430),按每个项目的数量*价格计算(17*20 + 1*10 + 2*10 + 3*20).以下公式正确地执行此操作:
=SUMPRODUCT(B6:B9,SUMIF(A2:A3,A6:A9,B2:B3))
Run Code Online (Sandbox Code Playgroud)
我理解SUMPRODUCT和SUMIF的基础知识.但是在这里,我对SUMIF范围的论证是A2:A3,这让我认为SUMIF将遍历A2和A3,而不是通过A8:A11(这是标准).是什么赋予了?
编辑:不清楚的部分是,当前两个参数具有不同的维度时,SUMIF究竟做了什么(它的迭代模式是什么)(这里,范围是2个单元格,而标准是4个单元格).另外,SUMIF的"输出"是什么?数组?什么尺寸?
另外,如果我忽略了数量而只是想在每次看到一张桌子时添加20,每当我看到一把椅子时都要加10,我想我会这么做:
=SUMIF(A2:A3,A6:A9,B2:B3)
Run Code Online (Sandbox Code Playgroud)
但这不起作用,我必须用SUMPRODUCT()将它封装起来才能正常工作并正确评估为60.将它封装在SUM中也不起作用(可能是因为SUMIF不返回数组? )为什么?
我已经阅读了很多教程但仍然无法理解这一点,并且非常感谢对这两种情况的清晰,直观的解释.谢谢.
我想在 make 退出时执行一个 shell 命令,不管它构建的是什么目标。似乎 make 没有办法直接做到这一点。但是,这里有一个在启动时执行 shell 命令的示例,无论目标如何:
是否有任何类似的 hack 在退出前执行一次 shell 命令?我可以将命令放在每个目标的底部,但是 a) 它会被执行多次,并且 b) 这很丑陋且难以管理。
我想在vim中为任务列表创建自定义语法高亮.
任务项以连字符开头.两种类型的任务项是相关的:(a)没有'@done'标记的项目.(b)带有@done标签的项目.(a)和(b)需要以不同的方式加以强调.
我正在使用taskpaper,它工作正常,但问题是,我正在尝试使这适用于跨越多行的任务项.例如:
- Regular item (works)
- Completed item @done (works)
- Multi-line item. This item continues on to
the line below. (doesn't work)
- Multi-line completed item. This item continues
on to the line below. (doesn't work). @done
Run Code Online (Sandbox Code Playgroud)
任务纸上的突出显示文件适用于前两个,但不适用于后两个.作为一个解决方法的黑客,我尝试了上面的最后一个案例:
syn region multLineDoneItem start="{" end="}" fold
HiLink multLineDoneItem NonText
Run Code Online (Sandbox Code Playgroud)
但现在,我被迫用大括号标记多行完成项目,如下所示:
- {Multi-line completed item. This item continues
on to the line below. (workaround works).}
Run Code Online (Sandbox Code Playgroud)
我已经搜索过stackexchange和其他地方了.我将不胜感激任何帮助!:)
vim 可以很好地缩进文本文件中的列表(或项目符号):
- this is item one that
is indented correctly
- this is item two that
is also indented
correctly
Run Code Online (Sandbox Code Playgroud)
我可以gqap在上面的段落中输入内容,并且格式和缩进工作正常。
然而,这在 python 注释中不起作用,并且会像这样缩进:
# - this is item one that
# is not indented correctly
# - this is item two that
# is also not indented
# correctly
Run Code Online (Sandbox Code Playgroud)
如果我gqap在上面的 python 注释中输入,vim 甚至无法识别项目符号点。并最终将整个块格式化为段落。
那么对于项目符号和缩进,如何让 vim 在 python 注释中的行为与在常规文本文件中的行为相同?