我正在使用docopt编写我的第一个python命令行工具并遇到了问题。
我的结构是这样的:
Usage:
my-tool configure
my-tool [(-o <option> | --option <option>)]
...
我试图先找到一种方法来运行my-tool -o foo-bar
,然后可选择传递值&#39; foo-bar&#39;如果我接下来运行my-tool configure
,请进入我的配置功能。
在pseduocode中,转换为:
def configure(option=None):
print option # With the above inputs this should print 'foo-bar'
def main():
if arguments['configure']:
configure(option=arguments['<option>'])
return
...
有没有办法在不改变参数结构的情况下使其工作?
我正在寻找避免my-tool configure [(-o <option> | --option <option>)]
答案 0 :(得分:1)
由于您在2个不同的实例上运行它,因此最好将值存储在某种config / json文件中,每次运行时都会清除这些值&#34; configure&#34;。
import json
def configure(config_file):
print config_file[opt_name] # do something with options in file
# clear config file
with open("CONFIG_FILE.JSON", "wb") as f: config = json.dump([], f)
def main():
# load config file
with open("CONFIG_FILE.JSON", "rb") as f: config = json.load(f)
# use the configure opt only when called and supply the config json to it
if sys.argv[0] == ['configure']:
configure(config)
return
# parse options example (a bit raw, and should be done in different method anyway)
parser = OptionParser()
parser.add_option("-q", action="store_false", dest="verbose")
config_file["q"] = OPTION_VALUE
答案 1 :(得分:0)
我尝试编写一些脚本来帮助你,但它有点超出了我(当前)的新手技能水平。
但是,我开始采用的工具/方法可能会有所帮助。尝试使用sys.argv
(生成脚本运行时所有参数的列表),然后使用一些正则表达式(import re
...)。
我希望这有助于其他人帮助你。 (: