小编Pon*_*ars的帖子

argparse与必需的子命令

使用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)

python argparse

30
推荐指数
2
解决办法
8940
查看次数

在第一个匹配的地址范围后,如何让sed退出?

我有一个文件:

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)

我该如何做到这一点?

regex sed

23
推荐指数
3
解决办法
1万
查看次数

在Python中禁用Plotly以任何形式与网络通信

是否有可能获得Plotly(在Python中使用)"严格本地"?换句话说,是否可以以保证不会因任何原因联系网络的方式使用它?

这包括试图联系Plotly服务的程序(因为那是商业模式),以及确保在生成的html中的任何地方点击都不会有Plotly或其他任何地方的链接.

当然,我希望能够在连接到网络的生产机器上执行此操作,因此不能选择拔出网络连接.

python networking plotly

7
推荐指数
1
解决办法
811
查看次数

SUMPRODUCT(SUMIF()) - 这是如何工作的?

第1部分:

我能够构建一个完全符合我想要的公式(从一些例子中),但是,我无法弄清楚它究竟是如何工作的.我有,从单元格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的"输出"是什么?数组?什么尺寸?

第2部分:

另外,如果我忽略了数量而只是想在每次看到一张桌子时添加20,每当我看到一把椅子时都要加10,我想我会这么做:

=SUMIF(A2:A3,A6:A9,B2:B3)
Run Code Online (Sandbox Code Playgroud)

但这不起作用,我必须用SUMPRODUCT()将它封装起来才能正常工作并正确评估为60.将它封装在SUM中也不起作用(可能是因为SUMIF不返回数组? )为什么?

我已经阅读了很多教程但仍然无法理解这一点,并且非常感谢对这两种情况的清晰,直观的解释.谢谢.

excel sum excel-formula

5
推荐指数
1
解决办法
5万
查看次数

在构建任何目标后强制 Makefile 执行脚本(就在退出之前)

我想在 make 退出时执行一个 shell 命令,不管它构建的是什么目标。似乎 make 没有办法直接做到这一点。但是,这里有一个在启动时执行 shell 命令的示例,无论目标如何:

强制 Makefile 在构建目标之前执行脚本

是否有任何类似的 hack 在退出前执行一次 shell 命令?我可以将命令放在每个目标的底部,但是 a) 它会被执行多次,并且 b) 这很丑陋且难以管理。

shell makefile

5
推荐指数
1
解决办法
3242
查看次数

vim自定义语法高亮显示

我想在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 syntax-highlighting vim-syntax-highlighting

3
推荐指数
1
解决办法
1624
查看次数

vim:在注释中缩进项目符号/列表(在Python中)

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 注释中的行为与在常规文本文件中的行为相同?

vim auto-indent

1
推荐指数
1
解决办法
827
查看次数