当我使用python argparse的子命令时,我可以得到所选的参数.
parser = argparse.ArgumentParser()
parser.add_argument('-g', '--global')
subparsers = parser.add_subparsers()
foo_parser = subparsers.add_parser('foo')
foo_parser.add_argument('-c', '--count')
bar_parser = subparsers.add_parser('bar')
args = parser.parse_args(['-g, 'xyz', 'foo', '--count', '42'])
# args => Namespace(global='xyz', count='42')
Run Code Online (Sandbox Code Playgroud)
所以args不包含'foo'.sys.argv[1]由于可能的全局参数,简单编写不起作用.如何获取子命令本身?
Clojure有一些Web框架
还有一些用于处理某些Web开发子任务的库,例如
还有数百个Java库可供使用.某些方面,已经讨论过在这里和他们两个的比较了一下.
我想知道这些框架/组件在成熟度,范围,开发的容易程度,Django/RoR感觉等方面的比较.
我有一个ivy.xml包含
<dependencies>
<dependency org="commons-lang" name="commons-lang" rev="2.4"/>
<dependency org="foo-bar" name="superwidgets" rev="1.5"/>
</dependencies>
Run Code Online (Sandbox Code Playgroud)
整个superwidget内容托管在http://example.com/m2/的maven存储库中.常春藤文档提到了解析器,但它似乎假设一个常春藤存储库.如何将单个非官方maven存储库添加到我的常春藤设置中,仅供单个模块使用?(或换句话说,什么对应<repository>于常春藤中maven的标签?)没有什么花哨的,所以我希望在我的ivy.xml中有一个单行程.
让代码先发言
def bars = foo.listBars()
def firstBar = bars ? bars.first() : null
def firstBarBetter = foo.listBars()?.getAt(0)
Run Code Online (Sandbox Code Playgroud)
是否有更优雅或惯用的方式来获取列表的第一个元素,如果不可能则为null?(我不会在这里考虑优雅的试试块.)
你有什么时候做单元测试
举个例子,想象一下测试一个CSV阅读器(我刚刚编写了一个演示符号),
def test_readCsv(): ...
@dependsOn(test_readCsv)
def test_readCsv_duplicateColumnName(): ...
@dependsOn(test_readCsv)
def test_readCsv_unicodeColumnName(): ...
Run Code Online (Sandbox Code Playgroud)
我希望只有在父测试成功的情况下才能运行子测试.这背后的原因是运行这些测试需要时间.许多失败的报告可以归结为一个原因也不会提供信息.当然,我可以把所有边缘情况都塞进主要测试中,但我想知道是否有更有条理的方法来做到这一点.
我发现了这些相关但不同的问题,
更新:
我发现TestNG具有很强的内置支持测试依赖性.你可以写这样的测试,
@Test{dependsOnMethods = ("test_readCsv"))
public void test_readCsv_duplicateColumnName() {
...
}
Run Code Online (Sandbox Code Playgroud) 我只用它们的代码大小来比较语言枪战游戏中的语言.以下是我得到的摘要(最短的,按类似得分分组).
我想知道为什么.获奖者似乎是普通的动态语言.Erlang,Racket(néePLTScheme)和F#都做得很好.Haskell和Common Lisp看起来并不比声称要冗长的Java更简洁.
更新:
我用图表找到了关于这个主题的深刻见解.我还发现了一个类似的语言对比较大的程序(一个简单的光线跟踪器).总而言之,我不会说我得到了"答案",但我得到了一些思考.
comparison programming-languages functional-programming code-size
有些格式实际上是伪装的zip文件,例如docx或odt.如果我将它们直接存储在版本控制中,它们将作为二进制文件处理.我理想的解决方案是
foo.docx/为每个foo.docx文件创建一个目录,将所有文件解压缩到其中foo.docx可以在更新后从存储的文件中重新创建我不希望docx文件本身受版本控制.(我知道一个相关的问题,建议使用自定义差异的不同方法.)
这可行吗?这可以用mercurial吗?
更新:
我知道钩子.我对细节很感兴趣.这是一个演示预期行为的会话.
> hg add foo.docx
> hg status
A foo.docx
> hg commit
> # Change foo.docx with external editor
> hg status
M foo.docx
> hg diff
+++ foo.docx/word/document.xml
- <w:t>An idea</w:t>
+ <w:t>A much better idea</w:t>
Run Code Online (Sandbox Code Playgroud) 我想在Windows服务器上使用mercurial.因为我想通过http来拉和推,这hg serve似乎是最简单的解决方案.它工作正常,但我在每次重启后重新启动它,所以我需要它作为Windows服务.手动安装它sc create ...不起作用,它创建了一个服务,当我尝试启动它时会引发错误.我发现了一些对这个问题的引用
但如果有的话,他们的记录很差.(当然,我可以安装一个Web服务器并使用hgweb,但它看起来更复杂.)您是否有任何经验如何轻松设置hg serve ... <many args>为Windows服务?
更新:感谢您采用不同的方法.我们住在一起hg serve,我们公司的windows-guy设法安装它作为一个不太合适的服务.
有一种模式偶尔会发生.我有一个多次调用的方法,它包含以下代码段:
Foo foo = getConfiguredFoo();
if (foo == null) {
logger.warn("Foo not configured");
foo = getDefaultFoo();
}
Run Code Online (Sandbox Code Playgroud)
然后我的日志文件被这个警告混乱了一百次.我知道我可以grep把它拿出来,但我想知道是否有更好的方法只能看到这个警告一次.
注意:默认情况下,重复邮件是正确的行为,因此这不是为了避免无意的重复日志消息.我将我的问题标记为log4j,但我对其他java日志框架持开放态度.
我想在保存文件时运行脚本.(这是git-wip的自动git提交).它与IntelliJ IDEA中的保存操作有关,但它主要吸引了有关代码重新格式化的答案.3年前也问过这个问题.我找到的唯一片段是http://arhipov.blogspot.hu/2011/04/code-snippet-intercepting-on-save.html.所以我想知道事情是否已经改变,现在很容易添加一个保存钩子.
comparison ×2
mercurial ×2
python ×2
argparse ×1
artifactory ×1
clojure ×1
code-size ×1
command-line ×1
docx ×1
frameworks ×1
groovy ×1
idiomatic ×1
ivy ×1
java ×1
list ×1
log4j ×1
logging ×1
maven-2 ×1
service ×1
unit-testing ×1
warnings ×1
windows ×1
zip ×1