PEAR: Console_CommandLine #2 – 기본

Console_CommandLine을 사용하기 위해서는 Console_CommandLine 인스턴스를 생성한 후에, addOption() 또는 addArgument() 메소드로 옵션이나 인자에 대한 명세를 설정한 후 parse() 메소드를 통해 파싱을 하면 됩니다. 이 과정 중에 명세에 맞지 않는 인자를 발견하면 예외가 발생합니다. 이 때 발생한 예외를 잡아서 적절한 사용법 안내를 화면에 출력합니다.

<?php

require 'vendor/autoload.php';

$parser = new Console_CommandLine(['name' =>'hello']);
$parser->description = 'Hello Program';
$parser->version = '1.0.0';

try {
    $result = $parser->parse();
    echo 'Hello.'.PHP_EOL;
} catch (Exception $e) {
    $parser->displayError($e->getMessage());
}

우선 컴포져를 통해서 Console_CommandLine 패키지를 읽어들이기 위해 vendor/autoload.php를 불러들입니다. 그 다음 Console_CommandLine 인스턴스를 생성하면서 프로그램 이름을 ‘hello’로 설정합니다. 프로그램 설명은 ‘Hello Program’으로, 버전은 ‘1.0.0’으로 설정합니다. 설정은 인스턴스를 생성하면서 매개변수로 전달하여 할 수도 있고, 생성 후 프로퍼티에 값을 대입하여 할 수도 있습니다.

$ php example01.php -h
Hello Program

Usage:
  hello [options]

Options:
  -h, --help     show this help message and exit
  -v, --version  show the program version and exit

기본적으로 도움말(-h, –help) 옵션을 제공합니다. 버전(-v, –version) 옵션은 버전을 설정한 경우에만 사용 가능합니다.

<?php

require 'vendor/autoload.php';

$parser = new Console_CommandLine(['name' =>'hello']);
$parser->description = 'Hello Program';
$parser->version = '1.0.0';
$parser->addOption(
    'korean', 
    [
        'short_name' => '-k',
        'long_name' => '--korean',
        'description' => '한국어',
        'action' => 'StoreTrue'
    ]
);
try {
    $result = $parser->parse();

    if (isset($result->options['korean']) && $result->options['korean'] == true) {
        $hello = '안녕하세요.';
    } else {
        $hello = 'Hello.';
    }

    echo $hello.PHP_EOL;
} catch (Exception $e) {
    $parser->displayError($e->getMessage());
}

이번에는 인사를 한국어로 출력하는 옵션(-k, –korean)을 추가했습니다. addOption() 메소드를 이용해 옵션 이름은 ‘korean’으로 하고, 짧은 옵션은 -k, 긴 옵션은 --korean으로 설정했습니다. description은 옵션에 대한 설명으로 도움말(-h) 옵션 사용시 출력됩니다. action은 옵션을 지정했을 때 어떻게 처리하는가에 대한 값으로, 여기서는 -k 옵션을 지정하면 true 값으로 설정하도록 했습니다. (StoreTrue)

옵션값은 options 배열에 옵션 이름을 첨자로 사용해서 확인 할 수 있습니다. 옵션을 사용하지 않은 경우 null 값이 됩니다. 여기서는 StoreTrue 액션으로 지정했으므로, 한국어 옵션을 사용한 경우 true 값이 됩니다.

$ php example-2.php -h
Hello Program

Usage:
  hello [options]

Options:
  -k, --korean   한국어
  -h, --help     show this help message and exit
  -v, --version  show the program version and exit

도움말을 출력 해보면 추가한 한국어 옵션을 확인 할 수 있습니다.

$ php example-2.php 
Hello.
$ php example-2.php -k
안녕하세요.
$ php example-2.php --korean
안녕하세요.

이제 한국어 옵션(-k, --korean)을 사용하면 한국어로 인사말을 출력합니다.

<?php

require 'vendor/autoload.php';

$parser = new Console_CommandLine(['name' =>'hello']);
$parser->description = 'Hello Program';
$parser->version = '1.0.0';
$parser->addOption(
    'korean', 
    [
        'short_name' => '-k',
        'long_name' => '--korean',
        'description' => '한국어',
        'help_name' => 'KOREAN',
        'action' => 'StoreTrue'
    ]
);
$parser->addArgument(
    'name',
    [
        'multiple' => true, 
        'description' => '이름',
        'help_name' => 'NAME'
    ]
);
try {
    $result = $parser->parse();
    if (isset($result->options['korean']) && $result->options['korean'] == true) {
        $hello = '안녕하세요.';
    } else {
        $hello = 'Hello.';
    }

    foreach ($result->args['name'] as $name) {
        echo "{$hello} {$name}.".PHP_EOL;
    }
} catch (Exception $e) {
    $parser->displayError($e->getMessage());
}

이름을 명령행 인자로 받아 인사를 하도록 해보았습니다. addArgument() 메소드를 통해 명령행 인자를 추가 할 수 있습니다. 명령행 인자 이름은 ‘name’으로, description은 ‘이름’으로, help_name은 ‘NAME’으로 설정했습니다. descriptionhelp_name은 도움말 화면을 통해 출력됩니다.

multipletrue로 설정하면, 인자를 여럿 받을 수 있습니다. 도움말에는 help_name 뒤에 숫자를 붙이고 말줄임표를 뒤에 덧붙여서 인자를 여럿 사용 할 수 있다는 것을 보여줍니다.

명령행 인자는 args 배열을 통해서 읽어들일 수 있습니다. 옵션과 마찬가지로 명령행 인자 이름 ‘name’이 첨자로 사용됩니다.

$ php example-3.php -h
Hello Program

Usage:
  hello [options] NAME1 NAME2 ...

Options:
  -k, --korean   한국어
  -h, --help     show this help message and exit
  -v, --version  show the program version and exit

Arguments:
  NAME  이름

옵션 다음에 ‘NAME’ 인자를 쓸 수 있다고 도움말에 표시됩니다. 인자가 어떤 값인지에 대한 설명은 하단 ‘Arguments’ 부분에 출력됩니다.

$ php example-3.php bookworm
Hello. bookworm.
$ php example-3.php -k bookworm hellfire
안녕하세요. bookworm.
안녕하세요. hellfire.

다음에는 옵션과 명령행 인자를 XML로 설정하는 법에 대해 이야기 해보려합니다.

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다