我的argparse在顶层只有3个标志(store_true),其他一切都是通过subparsers处理的.当我运行时myprog.py --help,输出显示所有子命令的列表,如normal , {sub1, sub2, sub3, sub4, ...}. 所以,默认工作很好......
我通常记不起我需要的确切子命令名称及其所有选项.所以我最终做了两次帮助查找:
myprog.py --help
myprog.py sub1 --help
Run Code Online (Sandbox Code Playgroud)
我经常这样做,我决定把它塞进一步.我宁愿让我的顶级帮助输出一个巨大的摘要,然后我手动滚动列表.我觉得它要快得多(至少对我来说).
我正在使用RawDescriptionHelpFormatter,并手动输入长帮助输出.但是现在我有很多子命令,它变得很难管理.
有没有办法只用一个程序调用获得详细的帮助输出?
如果没有,我如何迭代我的argparse实例的子分析器,然后从每个实例中单独检索帮助输出(之后我将粘合在一起)?
这是我的argparse设置的快速概述.我清理/剥离了相当多的代码,所以如果没有一些帮助,这可能无法运行.
parser = argparse.ArgumentParser(
prog='myprog.py',
formatter_class=argparse.RawDescriptionHelpFormatter,
description=textwrap.dedent(""" You can manually type Help here """) )
parser.add_argument('--debuglog', action='store_true', help='Verbose logging for debug purposes.')
parser.add_argument('--ipyonexit', action='store_true', help='Drop into an embeded Ipython session instead of exiting command.')
subparser = parser.add_subparsers()
### --- Subparser B
parser_b = subparser.add_parser('pdfreport', description="Used to output reports in PDF format.")
parser_b.add_argument('type', type=str, choices=['flatlist', 'nested', 'custom'],
help="The type …Run Code Online (Sandbox Code Playgroud) 在Windows 7(64位)上运行python 2.7.
在阅读库模块的文档时multiprocessing,它会多次声明模块的重要性__main__,包括条件(特别是在Windows中):
if __name__ == "__main__":
# create Process() here
Run Code Online (Sandbox Code Playgroud)
我的理解是,你不想在模块的全局命名空间中创建Process()实例(因为当子进程导入模块时,他会无意中产生另一个).
我不必将流程管理器放在我的包执行层次结构的最顶层(在PARENT中执行).只要我的Process()在类方法中创建,管理和终止,甚至在函数闭包中.只是不在顶级模块命名空间中.
我是否正确理解了此警告/要求?
在前两个回复之后,我添加了这个引用.这是2.7文档中第16.6节多处理的介绍.
注意:此程序包中的功能要求
__main__子程序可以导入该模块.这在编程指南中有所涉及,但值得在此指出.这意味着一些示例,例如multiprocessing.Pool示例在交互式解释器中不起作用......
我需要这种行为,但宁可有一个递减的列表,而不是一个增长的列表.顺序顺序对此操作很重要.
for item in mylist:
if is_item_mature(item):
## Process him
else:
## Check again later
mylist.append(item)
Run Code Online (Sandbox Code Playgroud)
但我宁愿让它更像这样.这是否像我想的那样?有更好的方法吗?
while mylist:
item = list.pop(0)
if is_item_mature(item):
##Process
else:
mylist.append(item)
Run Code Online (Sandbox Code Playgroud) 我正在使用Flask作为我的python wsgi服务器,而sqlalchemy使用我的所有数据库访问.
我想我想在我的应用程序中使用Flask-Sqlalchemy扩展,但我不想使用声明性基类(db.Model),相反,我想使用sqlalchemy.ext.declarative中的基类.
这是否会破坏使用扩展程序的全部目的?
我的用例:
我想扩展程序可以帮助我更好地管理会话/引擎,但我想分别处理所有模型.
我实际上不介意使用扩展,但我想编写严格的模型.我正在从一个非烧瓶应用程序移植代码,我会在我去的时候将更改推回到该项目.例如,如果flask-sqlalchemy允许我欺骗表元数据,那么当代码被推回时会导致问题.我的代码中还有一些代码可以进行大量的类型检查(多态身份),我还记得在使用扩展时不建议读取表格上的类型检查.
当使用带有关键字的参数(可选和位置都有此问题)时choices,生成的帮助输出会显示这些选项.
如果相同的参数还包含metavar关键字,则从生成的输出中省略选项列表.
我脑子里想的是什么,是为了显示metavar在usage路线,但实际上显示可用的选择的时候,"autohelp"列出位置/可选参数的详细信息.
任何简单的修复/解决方法?
我已经为自定义帮助功能启动了一个argparse包装器.也许这应该是我的TODO列表中的另一个功能.
我真的想在一个正确的终端和cygwin提供的shell中交互式运行我的Win7 ipython(mintty或rxvt会很棒).
我在python方面取得了一些成功,但IPython并没有真正的合作.如果我们从rxvt bash提示符运行它:
$ /cygdrive/c/pydir/python.exe -i
Run Code Online (Sandbox Code Playgroud)
我最终得到了一个相当成功的python交互式会话.但是香草蟒蛇并不像IPython那么精彩.那么我试试这个:
$ /cygdrive/c/pydir/ipython.exe
Run Code Online (Sandbox Code Playgroud)
程序只是阻止bash提示,似乎产生一个完全独立的进程(它不会产生任何窗口,或显示stdin/stdout的迹象).
相反,我使用这个:
$ /cygdrive/c/pydir/python.exe -i /cygdrive/c/pydir/ipython-script.py
Run Code Online (Sandbox Code Playgroud)
一开始很令人兴奋,但你很快意识到ipython没有正确地与终端接触.没有readline支持,光标控制不佳,stdin似乎处理典型的python,但没有[out]提示(虽然"print"会吐出文本),像backspace/enter/tab这样的简单事情似乎完全被破坏了(光标是非常挑衅的,没有什么像维护一个ncurse缓冲区(你只需键入ipy命令提示).一旦我放弃了会话,退出就成了另一个问题.我可以返回bash提示符,但我没有标准输入.事实证明,总是有一个挂起的python.exe进程必须从Windows端被杀死(并且它不会释放stdin直到它死掉).
是否有快速修复或替代方法以这种方式运行Ipython?我可以使用cygwin二进制文件完成大部分开发工作,但是能够运行win32二进制文件交互将在调试/测试win32特定python库时有很大帮助.
PS ::::我真的需要Tab-completion和clean输出.我试图通过一堆COM接口,我唯一可以获得的方法是使用交互式ipy会话.
PS ::::我使用的是64位Cygwin和32位win32 python.这可能是简单的不匹配吗?
我经常使用vim,但是我的工作流程通常会迫使我与其他IDE进行交互,所以我不是一个像神一样的vim poweruser,也不是我想要的.Vim不是我的IDE,也不是我想要的.它是一个快速而轻巧的编辑器,不会妨碍我.
我正在寻找简单的使用和配置,而不是超级功率或金星效率.
到目前为止,我一直在使用我的代码段预加载几个寄存器,然后保留一个备忘单,其中哪个寄存器具有哪个文本块.但是我的寄存器用完了,一个字母数字字母并没有立即提醒我我预装的是什么.
存储任意数量的原始文本块的最简单方法是什么,然后使用单个关键字和1个热键(按任意顺序:关键字<>热键)检索它们.
我想我可以开始编写仅仅将文本块打印到当前缓冲区的命名函数.这几乎是我所需要的,但我希望有一种更简单的方法来维护/更新我的代码段集合.
是否有任何覆盖我的用例的极简主义插件,或者我是否需要坚持我的.vimrc/python-commands方法?
次要更新 我没有意识到你可以用mapleader链接这么多字母,这可能提供我需要的魔力.然后我仍然需要别名回到一些更大的函数集(可能使用python来定义命令).
假设:使用python时itertools.tee(),所有重复的迭代器都引用原始迭代器,并缓存原始文件以提高性能.
我在以下调查中主要关注的是关于预期/正确缓存行为的我的IDEA .
编辑:我对正确缓存的想法是基于有缺陷的功能假设.最终需要一个围绕tee的小包装(这可能会对缓存产生影响).
假设我使用tee创建3个迭代器克隆:a, b, c = itertools.tee(myiter,3).还假设在这一点上,我删除了对原始的所有引用,myiter(意思是,我的代码没有很好的方式可以在下文中引用回原文).
在代码的某个后期,如果我决定要另一个克隆myiter,我可以重新发布()我的一个副本吗?(正确缓存回原来的缓存myiter)
换句话说,在稍后的某个时刻,我希望我曾用过这个:
a, b, c, d = itertools.tee(myiter,4).但是,既然我已经放弃了对原作的所有引用myiter,那么我能够最好的就是:
copytee = itertools.tee(a, 1) #where 'a' is from a previous tee()
tee()知道我想要什么吗?(我真的想要创建一个基于原始myiter克隆的克隆,而不是中间克隆a(可能部分消耗))
python ×7
argparse ×2
cygwin ×1
flask ×1
iteration ×1
list ×1
sqlalchemy ×1
vim ×1
vim-plugin ×1