2016-02-24 108 views
0

我有两个Torch脚本。一个是训练模型的代码,另一个是测试它的代码。需要Torch命令行脚本而不解析命令行参数

培训脚本接受命令行参数

cmd = torch.CmdLine() 
cmd:option('--foo', 'bar', 'example option') 
opt = cmd:parse(arg or {}) 

测试脚本也可以接受命令行参数。它需要培训脚本,因为它需要一些函数和常量训练脚本定义

require 'training' 
cmd = torch.CmdLine() 
cmd:option('--bar', 'foo', 'other option') 
opt = cmd:parse(arg or {}) 

当我运行我的测试脚本,它运行从训练cmd:parse调用,它失败,因为bar不是有效的选项通过。是否有一个如何使cmd的约定:解析调用不会发生,除非它从命令行运行?

+0

开始你的训练脚本,如果不是debug.getinfo(3)然后print'It可以安全地调用cmd:parse()now'end' [Link](http://stackoverflow.com/a/9074598/ 1847592) –

回答

0

如评论中所述,debug.getinfo(3)在从include调用时会给出不同的行为。

从命令行调用时,debug.getinfo(3).namenil。当从该文件的require调用时,debug.getinfo(3).namepcall。所以我将所有的命令行函数都包含在if块中,首先检查debug.getinfo(3)。 (它类似于Python的__name__ = '__main__')。

这是与火炬解释器,我不知道这是否与其他Lua解释器一起工作。