用于处理数据的命令应用程序的微框架,可以是php还是python?

问题描述 投票:0回答:2

这是我用来构建一个php命令行应用程序来处理数据。

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

由于Legacy原因,我使用Laravel php框架。

所以我使用Laravel“Artisan Development”来构建自定义命令,然后运行命令use

php artisan ...

Laravel是一个网络应用程序,但现在,我只使用它的工匠命令。这似乎是一种矫枉过正,我为此目的安装了完整版Laravel Framework。

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

我的问题是

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

谢谢!

php python command-line command
2个回答
1
投票

对于Python,我绝对推荐Click。它已成为用于创建命令行工具的Python库。它由Flask的作者编写/维护(目前是GitHub上排名第五的最受欢迎的Python回购)。我在创建命令行工具时一直使用Click。它拥有大多数人需要的一切。

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


1
投票

我做了这个小图书馆,

https://github.com/ArtisticPhoenix/Cli

欢迎您使用它或从中获取灵感,基本上它是围绕getopt()的包装

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

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

你也可以在作曲家上得到它:

"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
   ]);

当然,你可以结合这些2。

Github页面上有一些文档。它有一些小依赖,只是我喜欢重复使用的常见内容(全都在作曲家中)。它总共不到1000行代码。也许是20或30kb。

我需要制作一个小命令行,我有这个想法......

© www.soinside.com 2019 - 2024. All rights reserved.