代码之家  ›  专栏  ›  技术社区  ›  searain

用于命令应用程序处理数据的微框架(php或python)?

  •  0
  • searain  · 技术社区  · 6 年前

    这些应用程序不是web应用程序,它们在命令行shell中运行以处理一些数据。

    由于遗留的原因,我使用了Laravel php框架。

    因此,我使用Laravel“Artisan Development”来构建自定义命令,然后使用

    php artisan ...
    

    Laravel是一个web应用程序,但现在,我只使用它的artisan命令。我为此安装了完整版本的Laravel框架,这似乎有些过头了。

    但我找不到一个好的php微框架专门用于构建命令应用程序。

    我的问题是

    • 像Lumen,一个由Laravel开发的用于API的微框架一样,您有任何可以推荐的用于命令的Laravel/php微框架吗?
    • 或者您可以推荐用于命令应用程序的python微框架吗?我在谷歌上搜索,“点击”是推荐的。还有其他框架吗?

    谢谢

    0 回复  |  直到 6 年前
        1
  •  1
  •   jnrbsn    6 年前

    Click . 它已经成为 这个 用于创建命令行工具的Python库。它由以下作者编写/维护: Flask (目前是GitHub上排名第5的Python回购协议)。我在创建命令行工具时一直使用单击。它拥有大多数人需要的一切。

    不确定您对微框架的定义是什么,但Click没有外部依赖关系,在我安装它时大约需要500 KB(包括.pyc文件)。此外,它实际上不需要任何样板来设置和开始使用。所以我想我可以称之为微观框架。

        2
  •  1
  •   ArtisticPhoenix    6 年前

    我建了一个小图书馆,

    https://github.com/ArtisticPhoenix/Cli

    欢迎您使用它或从中获得灵感,基本上这是一种包装 getopt()

    http://php.net/manual/en/function.getopt.php

    getopt从命令行参数列表中获取选项

    您也可以在composer上获得:

    "require" : {
        "evo/cli" : "~1.0"
    }
    

    基本用法如下:

    $Cli = Cli::getInstance();
    $Cli->setArgument('h', 'help', 'Show this help document');
    //... other arguments 
    if($Cli->getArgument('h')) $Cli->printHelpDoc(); //exits
    

    您甚至可以从一个PHP配置文件中执行此操作,该文件只需放入 setArgument()

    //config.php
    return [
             [
               'shortName' => 'h',
               'longName' => 'help',
               'doc' => 'Show this help document'
             ]
          ];
    

    然后

      //cli.php
    
      $config = require 'config.php';
    
      $Cli = Cli::getInstance();
      $Cli->fromConfig($config);
    
      if($Cli->getArgument('h')) $Cli->printHelpDoc(); //exits
    

    您还可以像这样对输入参数进行动态验证(使用闭包):

        $Cli->setArgument('f', 'foo', 'This is just foo, and must always be foo', [
            'accept' => function($shortName, $value){
                if($value == 'foo') return true;
                return false;
            }
        ]);
    

    如果值好或不好,上面只返回一个布尔值。如果返回false,则会发出异常等。您也可以这样做:

       $Cli->setArgument('i', 'input', 'This is input that requires a value', [
           'requireValue' => true
       ]);
    

    当然,你可以把这两个结合起来。

    Github页面上有一些文档。它有一些小的依赖项,只是我喜欢重用的常见内容(全部在composer中)。总共不到1000行代码。可能是20或30kb。

    我需要做一个小的命令行,我有这个想法。。。