thrift IDL 生成代码的管理脚本
随着项目增多,thriftIDL生成代码的管理也越复杂。此工具用于生成thrift的代码,尽量使其脚本化,可配置,自动化。 无 #!/usr/bin/env php?php/** * 随着项目增多,thrift IDL 生成代码的管理也越复杂。 * 此工具用于生成 thrift 的代码,尽量使其脚本化,自
随着项目增多,thrift IDL 生成代码的管理也越复杂。此工具用于生成 thrift 的代码,尽量使其脚本化,可配置,自动化。
#!/usr/bin/env php <?php /** * 随着项目增多,thrift IDL 生成代码的管理也越复杂。 * 此工具用于生成 thrift 的代码,尽量使其脚本化,自动化。 * * 使用方法: * ./cthrift cms-exmaple ./cthrift.config.php * * cthrift.config.php 是个配置文件: <?php return array( 'thrift_command' => 'thrift --gen {gen} -out "{out}" "{idl}"', 'projects' => array( 'cms-exmaple' => array( 'gen' => 'php', // 代码目标语言,用于 thrift 的 --gen 选项 'out' => '/path/to/output', // 代码输出目录,用于 thrift 的 --out 选项 'idl_git_url' => 'https://git-url', // IDL 是否使用了 git 管理,如果设置,则自动 pull, // 例如 https://github.com/my/thrift-idl.git 'idl_git_pre' => '/src/master', // IDL 文件的 git URL 前缀。在本例中: // 假设 idl_git_url 为 https://github.com/my/thrift-idl.git // IDL 路径为 /path/to/cms.thrift,idl_root_path 为 /root/thrift/idl // 则 git 的全路径为 https://github.com/my/thrift-idl/src/master/path/to/cms.thrift // 对应的本地路径为 /root/thrift/idl/path/to/cms.thrift 'idl_root_path' => '/path/to/idl', // IDL 根目录,与 idls 拼接,如果有 git,此目录应当设置为 git 的根目录(含 .git 的目录) 'idls' => array( // IDL 所在的目录或文件 '/path/to/idl/1', '/path/to/idl/2', ), ), ), ); * * Author: https://github.com/heiing * Date: 2015-03-06T11:06+08:00 */ define("VERSION", "0.1.0"); function usage($self, $ln = PHP_EOL) { echo "Usage: {$self} project-name config-file [idl-git-url]{$ln}"; echo "project-name Project name{$ln}"; echo "config-file Config file path{$ln}"; echo "idl-git-url IDL git url{$ln}"; echo "{$ln}"; echo "config-file example: {$ln}"; echo "<?php{$ln}"; echo "{$ln}"; echo "return array({$ln}"; echo " 'thrift_command' => 'thrift --gen {gen} -out \"{out}\" \"{idl}\"',{$ln}"; echo " 'projects' => array({$ln}"; echo " 'cms-exmaple' => array({$ln}"; echo " 'gen' => 'php', // 代码目标语言,用于 thrift 的 --gen 选项{$ln}"; echo " 'out' => '/path/to/output', // 代码输出目录,用于 thrift 的 --out 选项{$ln}"; echo " 'idl_git_url' => 'https://git-url', // IDL 是否使用了 git 管理,如果设置,则自动 pull,{$ln}"; echo " // 例如 https://github.com/my/thrift-idl.git{$ln}"; echo " 'idl_git_pre' => '/src/master', // IDL 文件的 git URL 前缀。在本例中:{$ln}"; echo " // 假设 idl_git_url 为 https://github.com/my/thrift-idl.git{$ln}"; echo " // IDL 路径为 /path/to/cms.thrift,idl_root_path 为 /root/thrift/idl{$ln}"; echo " // 则 git 的全路径为 https://github.com/my/thrift-idl/src/master/path/to/cms.thrift{$ln}"; echo " // 对应的本地路径为 /root/thrift/idl/path/to/cms.thrift{$ln}"; echo " 'idl_root_path' => '/path/to/idl', // IDL 根目录,与 idls 拼接,如果有 git,此目录应当设置为 git 的根目录(含 .git 的目录){$ln}"; echo " 'idls' => array( // IDL 所在的目录或文件{$ln}"; echo " '/path/to/idl/1',{$ln}"; echo " '/path/to/idl/2',{$ln}"; echo " ),{$ln}"; echo " ),{$ln}"; echo " ),{$ln}"; echo ");{$ln}"; echo "// -------- end of config-file{$ln}"; echo "{$ln}"; echo "usage example:{$ln}"; echo "1. {$self} cms-example /root/cthrift/config.php{$ln}"; echo "2. {$self} cms-example /root/cthrift/config.php https://github.com/my/thrift-idl/src/master/cms.thrift{$ln}"; echo "{$ln}"; echo "GOOD LUCK{$ln}"; echo "{$ln}"; exit(1); } function error($message, $ln = PHP_EOL) { echo "Error: {$message}{$ln}"; exit(1); } function info($message, $ln = PHP_EOL) { echo "{$message}{$ln}"; } function config($name, $value = null) { static $pool = array(); if ($value === null) { return isset($pool[$name]) ? $pool[$name] : null; } $pool[$name] = $value; } function retend_config($name, $value) { if (!is_array($value) || is_numeric(implode('', array_keys($value)))) { return config($name, $value); } foreach ($value as $n => $v) { retend_config($name . '/' . $n, $v); } } function load_config() { $file = config('/config-file'); info('load config: ' . $file); if (!is_file($file)) { error('Config file not exists!'); } $configs = include $file; if (!isset($configs['projects'])) { error('Invalid config!'); } if (!isset($configs['projects'][config('/project-name')])) { error('Project not set!'); } foreach ($configs as $name => $value) { if (!is_array($value)) { config($name, $value); } else { retend_config($name, $value); } } } function do_command($cmd, $argv, $exit_on_error = true) { foreach ($argv as $name => $value) { $cmd = str_replace('{' . $name . '}', $value, $cmd); } info($cmd); $ret = 0; passthru($cmd, $ret); if ($ret !== 0 && $exit_on_error) { error('faild!'); } return $ret; } function process_project() { $pre = 'projects/' . config('/project-name'); $out = config("{$pre}/out"); if (null === ($cmd = config('thrift_command'))) { $cmd = 'thrift --gen {gen} ' . ($out ? '--out {out} ' : '') . ' {idl}'; } if (null === ($gen = config("{$pre}/gen"))) { error('gen not set!'); } if (null === ($path = config("{$pre}/idl_root_path"))) { error('idl_root_path not set!'); } if (!is_dir($path)) { error('idl_root_path not exists!'); } $path = rtrim($path, '/\\'); $git = rtrim(config("{$pre}/idl_git_url"), '/'); if (!empty($git)) { do_command("cd {$path}; git pull;", array(), true); } if (null !== ($url = config('/idl-git-url'))) { $git = (strtolower(substr($git, -4)) === '.git' ? substr($git, 0, -4) : $git) . config("{$pre}/idl_git_pre"); if ($git !== substr($url, 0, strlen($git))) { error('Invalid git url!'); } $idls = array(substr($url, strlen($git))); } else if (null === ($idls = config("{$pre}/idls")) || empty($idls)) { error('idls not set or empty!'); } foreach ($idls as $idl) { $idl = "{$path}{$idl}"; if (is_dir($idl)) { $idl_files = glob("{$idl}/*.thrift"); } else if (is_file($idl)) { $idl_files = array($idl); } else { info("Not Found: {$idl}"); continue; } foreach ($idl_files as $file) { do_command($cmd, array( 'gen' => $gen, 'out' => $out, 'idl' => $file, ), true); } } } function run($argv) { info("Thrift Creator " . VERSION); if (!isset($argv[2])) { usage($argv[0]); } config('/config-file', $argv[2]); config('/project-name', $argv[1]); if (isset($argv[3])) { config('/idl-git-url', $argv[3]); } load_config(); process_project(); info('DONE.'); } run($argv);

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









Cutting は、包括的な編集機能、可変速度のサポート、さまざまなフィルターや美容効果、豊富な音楽ライブラリ リソースを備えたビデオ編集ツールです。このソフトでは動画を直接編集したり、編集スクリプトを作成したりすることができますが、どのように行うのですか?このチュートリアルでは、エディターがスクリプトを編集および作成する方法を紹介します。作成方法: 1. コンピュータ上で編集ソフトウェアをクリックして開き、「作成スクリプト」オプションを見つけてクリックして開きます。 2. 作成台本ページで「台本タイトル」を入力し、概要に撮影内容の簡単な紹介文を入力します。 3. アウトラインに「ストーリーボードの説明」オプションを表示するにはどうすればよいですか?

Linuxシステムで.shファイルを実行するにはどうすればよいですか? Linux システムでは、.sh ファイルはシェル スクリプトと呼ばれるファイルであり、一連のコマンドを実行するために使用されます。 .sh ファイルの実行は非常に一般的な操作です。この記事では、Linux システムで .sh ファイルを実行する方法と具体的なコード例を紹介します。方法 1: 絶対パスを使用して .sh ファイルを実行する Linux システムで .sh ファイルを実行するには、絶対パスを使用してファイルの場所を指定できます。具体的な手順は次のとおりです。 ターミナルを開きます。

ブルー スクリーン コード 0x0000001 の対処法。ブルー スクリーン エラーは、コンピューター システムまたはハードウェアに問題がある場合の警告メカニズムです。コード 0x0000001 は、通常、ハードウェアまたはドライバーの障害を示します。ユーザーは、コンピュータの使用中に突然ブルー スクリーン エラーに遭遇すると、パニックになり途方に暮れるかもしれません。幸いなことに、ほとんどのブルー スクリーン エラーは、いくつかの簡単な手順でトラブルシューティングして対処できます。この記事では、ブルー スクリーン エラー コード 0x0000001 を解決するいくつかの方法を読者に紹介します。まず、ブルー スクリーン エラーが発生した場合は、再起動を試みることができます。

フェルマーの最終定理、AIに征服されようとしている?そして、全体の中で最も意味のある部分は、AI が解決しようとしているフェルマーの最終定理は、まさに AI が役に立たないことを証明するものであるということです。かつて、数学は純粋な人間の知性の領域に属していましたが、現在、この領域は高度なアルゴリズムによって解読され、踏みにじられています。画像 フェルマーの最終定理は、何世紀にもわたって数学者を悩ませてきた「悪名高い」パズルです。それは 1993 年に証明され、現在数学者たちはコンピュータを使って証明を再現するという大きな計画を立てています。彼らは、このバージョンの証明に含まれる論理的エラーがコンピュータによってチェックできることを望んでいます。プロジェクトアドレス: https://github.com/riccardobrasca/flt

タイトル: PyCharm の詳細: プロジェクトを削除する効率的な方法 近年、Python は強力で柔軟なプログラミング言語として、ますます多くの開発者に支持されています。 Python プロジェクトの開発では、効率的な統合開発環境を選択することが重要です。 PyCharm は、強力な統合開発環境として、プロジェクト ディレクトリを迅速かつ効率的に削除するなど、多くの便利な機能とツールを Python 開発者に提供します。以下では、PyCharm での削除の使用方法に焦点を当てます。

PyCharm は、豊富な開発ツールと環境構成を提供する強力な Python 統合開発環境であり、開発者がコードをより効率的に作成およびデバッグできるようにします。 Python プロジェクト開発に PyCharm を使用するプロセスでは、Python 環境がインストールされていないコンピューター上で実行できるように、プロジェクトを実行可能 EXE ファイルにパッケージ化する必要がある場合があります。この記事では、PyCharm を使用してプロジェクトを実行可能な EXE ファイルに変換する方法と、具体的なコード例を紹介します。頭

デバイスをリモートでプログラムする必要がある場合は、この記事が役に立ちます。あらゆるデバイスをプログラミングするためのトップ GE ユニバーサル リモート コードを共有します。 GE リモコンとは何ですか? GEUniversalRemote は、スマート TV、LG、Vizio、Sony、Blu-ray、DVD、DVR、Roku、AppleTV、ストリーミング メディア プレーヤーなどの複数のデバイスを制御するために使用できるリモコンです。 GEUniversal リモコンには、さまざまな機能を備えたさまざまなモデルがあります。 GEUniversalRemote は最大 4 台のデバイスを制御できます。あらゆるデバイスでプログラムできるトップのユニバーサル リモート コード GE リモコンには、さまざまなデバイスで動作できるようにするコードのセットが付属しています。してもいいです

この Windows PowerShell スクリプト チュートリアルは、テクノロジ愛好家でも、スクリプト スキルの向上を目指す専門家でも、初心者向けに設計されています。 PowerShell スクリプトに関する予備知識がない場合は、この記事は基本から始めて、あなたに合わせてカスタマイズしてください。 PowerShell 環境のインストール手順をマスターし、PowerShell スクリプトの主な概念と機能を説明します。 PowerShell スクリプトについてさらに学ぶ準備ができている場合は、このエキサイティングな学習の旅に一緒に乗り出しましょう。 WindowsPowerShell とは何ですか? PowerShell は、Microsoft によって開発されたハイブリッド コマンド システムです。
