.NET 용 명령 줄 인수 파서 찾기 [닫힌]


79

http://www.sellsbrothers.com/tools/Genghis/ 에서 "명령 줄 파서"와 같은 명령 줄 인수 파서를 찾고 있습니다.

내가 찾고있는 기능 :

  • 사용량 자동 생성
  • 필수 및 선택적 매개 변수를 확인할 수 있어야합니다.
  • 매개 변수는 구분 기호를 지원하는 IEnumerable을 지원해야합니다.
  • 플래그 매개 변수를 지원해야합니다.
  • "/ fx"== "/ f / x"와 같은 매개 변수 결합을 지원하면 좋을 것입니다.
  • "/ftest.txt"== "/ f test.txt"와 같은 매개 변수 뒤에 공백을 입력하지 않는 것이 좋습니다.

추신 : "명령 줄 파서"는 꽤 훌륭합니다. 디자인이 정말 마음에 들지만 문서도없고 새로운 업데이트도없고 필요한 매개 변수를 확인하는 방법과 같은 특정 작업을 수행 할 수 없었습니다.


가장 유연한 .NET 명령 줄 파서는 다음과 같습니다. gsscoder의 CommandLineParser
AlexMelw

답변:


52

개인적으로 가장 좋아하는 타사 명령 줄 구문 분석 라이브러리는 Command Line Parser 이며 이것이 여러분이 참조하는 것으로 가정합니다. 가장 최근 릴리스는 2 개월이 채되지 않았으며 정기적 인 커밋이 있습니다. 보다 성숙한 제품을 원한다면 모노 프로젝트에서 콘솔 라이브러리를 확인할 수 있습니다 (현재 네임 스페이스에 대한 직접 링크를 찾을 수 없지만 모노 프레임 워크의 일부입니다).


1
이거 좋아 보여서 한번해볼 게요.
박사. 악

이것을 구현하려고하는데 "플래그"인수를 지원합니까? 값이 필요하지 않은 "-enable"과 같은 것은 참 / 거짓입니다. 나는 그것을 찾을 수 없었다.
박사. 악

내가 옳다는 것을 기억한다면 그것은 상자에서 벗어나지 않지만 true / false가 지정되기를 기대하는 대신 부울 값에 대한 정규화되지 않은 스위치를 찾도록 파서를 수정하는 데 너무 많은 작업이되어서는 안됩니다.
Raoul

그런데 모노 파서는 Mono.GetOptions라고합니다. 그것은 당신이 찾고있는 것을 확실히 지원합니다. 모노 프레임 워크 소스의 해당 부분 만 다운로드하여 빌드하고 프로젝트에서 대체로 참조 할 수 있습니다.
Raoul

이 라이브러리를 직접 사용했으며 훌륭한 라이브러리라는 데 동의합니다.
Noldorin

20

ndesk.options를 살펴보십시오.

지금은 Mono.Options 라고 합니다.


3
우리는 많은 성공을 거둔 ndesk.options를 사용했습니다. 그것은 당신이 당신의 코드로 컴파일 할 수있는 단일 클래스의 : ndesk.org/Options
숀 목수

현재 그들의 사이트에는 NDesk.Options가 불안정하다는 경고가 있습니다. 경고 일뿐입니다 ... 이전 버전을 사용할 수 있습니다.
Kilhoffer 2011

또한 NDesk.Options에 대해 좋은 경험을했습니다. Perl의 Getopt :: Long을 모델로 한 것입니다.
jwd

5

인기 있고 매우 포괄적 인 C 명령 줄 구문 분석기는 GNU getopt 입니다. 이것은 C # /. Net 용으로 여러 번 포팅 (또는 복제)되었습니다. 이들 중 일부는 다음과 같습니다.

선택해라! 다른 몇 가지가 있으며 Google에서 이에 대해 알려줄 수 있습니다.


4

안타깝게도 표준 방식으로 처리하기위한 기본 지원이 없습니다. PowerShell을 살펴 보셨습니까? 나는 당신이 원하는 것을 정확히 수행하는 클래스가 그 쉘에 있다고 확신합니다.


예, PowerShell은 아마도 대부분의 경우 갈 길일 것입니다. cmdlet을 작성하는 것은 매우 쉽지만 작업이 거의 또는 전혀없이 많은 가능성을 열어줍니다.
John Saunders

powershell을 살펴 보는 것이 무엇을 의미하는지 잘 모르겠습니다. 오픈 소스가 아니거나 cmdlet을 찾아 .NET 구문으로 변환 할 수 있다는 뜻입니까?
박사. 악

3
그는 "독립 실행 형 실행 파일 대신 PowerShell cmdlet으로 코드를 작성"한다는 의미라고 생각합니다.
Joel Mueller

요즘 내 기본 작업 계획은 명령 줄 지향 프로그램을 powershell cmdlet으로 작성하는 것입니다. 이렇게하면 명령 줄이 구문 분석되는 방식에 대해 걱정할 필요가 없습니다.
Peter Stephens

나는 powerhell의 arg 파싱이 끔찍하다고 생각합니다.
Tim Abell

2

편집 : fatcat1111이 지적 했듯이이 기능은 .net 4.0의 최종 버전과 함께 제공되지 않았습니다.

C # 4.0에는 꽤 좋은 기능이 있습니다. 아마도 아직별로 도움이되지는 않을 것입니다. 그러나 당신은 그것이 나올 때 빌트인으로 쉽게 점프 할 수있는 무언가를 찾는 것을 고려하고 싶을 것입니다. Bart De Smet이 B # 블로그 에서 이에 대해 이야기했습니다.


2
System.Shell.CommandLine은 Framework v4에서 삭제되었습니다.
Justin R.


1

이 파서를 사용하기 시작하면 직접 유지 관리하거나 다른 사람에게 의존하여 유지 관리해야합니다. 가장 중요하고 즉각적인 요구 사항부터 시작하여 직접 작성하는 것이 더 나을 수 있습니다. 내가 작업 한 대부분의 콘솔 기반 애플리케이션에 대해 상당히 복잡한 명령 줄 구문 분석을 생성하는 데 너무 많은 작업이 필요하지 않음을 발견했습니다.

또한 구문 분석이 너무 복잡해지면 명령 줄 사용을 중지해야 할 때라는 것도 발견했습니다.


1
이것은 잘 알려진 문제이고 모든 단일 명령 줄 도구에 거의 필수이기 때문에 몇 가지 성숙한 솔루션이 있어야한다고 가정하고 내 자신의 사운드를 유지하고 작성하는 데 약간의 시간을 소비했습니다. 그러나 여기에 충분한 대답이 없기 때문에 당신이 옳을 수도 있습니다.
박사. 악

1
@Downvoter : -2 rep은 나를 괴롭히지 않습니다. 차이를 만들고 싶다면 반대 투표에 대한 이유를 알려주십시오.
John Saunders

1

나는 이것이 당신이 찾고있는 것이 아니라고 확신합니다.

여기 누군가가 그 문제를 가지고 있었고 그의 첫 번째 생각은 "야, ocaml은 꽤 좋은 것을 가지고 있습니다!"였고, 신속하게 F #으로 포팅했습니다.


+1 github.com/nessos/UnionArgParser는 꽤 좋은 예입니다
Ruben Bartelink

1

C # 3.0 쿡북에서 파서를 사용하고 있습니다.

이 책의 모든 예제는 http://examples.oreilly.com/9780596516109/에서 다운로드 할 수 있습니다 .

'인수'를 검색하면 찾을 수 있습니다. 모든 것을 자신의 클래스로 가져 오기 위해 약간의 코드 변경을해야하지만 이것은 큰 문제가 아닙니다.

마지막 두 포인트를 제외한 모든 포인트를 지원합니다 (파라미터 결합 및 누락 된 공간).


1

BizArk 라이브러리는 명령 줄 구문 분석기가 포함되어 있습니다.

기본적으로 CmdLineObject에서 상속하는 클래스를 만들고 명령 줄에서 채울 속성을 추가하고 속성에 CmdLineArgAttribute를 추가 한 다음 프로그램에서 Initialize를 호출하면됩니다. ClickOnce URL 인수도 지원합니다!

기능 (사이트에서) ...

  • 자동 초기화 : 클래스 속성은 명령 줄 인수에 따라 자동으로 설정됩니다.
  • 기본 속성 : 속성 이름을 지정하지 않고 값을 보냅니다.
  • 값 변환 : BizArk에 포함 된 강력한 ConvertEx 클래스를 사용하여 값을 적절한 유형으로 변환합니다.
  • 부울 플래그. 단순히 인수 (예 : / b는 true, / b-는 false)를 사용하거나 true / false, yes / no 등의 값을 추가하여 플래그를 지정할 수 있습니다.
  • 인수 배열. 명령 줄 이름 뒤에 여러 값을 추가하기 만하면 배열로 정의 된 속성을 설정할 수 있습니다. 예를 들어, / x 1 2 3은 x를 {1, 2, 3} 배열로 채 웁니다 (x가 정수 배열로 정의되었다고 가정).
  • 명령 줄 별칭 : 속성은 여러 명령 줄 별칭을 지원할 수 있습니다. 예를 들어, 도움말은?라는 별칭을 사용합니다.
  • 부분 이름 인식. 전체 이름이나 별칭을 철자 할 필요가 없으며 파서가 속성 / 별칭을 다른 것과 명확하게 구분할 수있을만큼만 철자를 입력하면됩니다.
  • ClickOnce 지원 : ClickOnce 배포 된 응용 프로그램의 URL에 쿼리 문자열로 지정된 경우에도 속성을 초기화 할 수 있습니다. 명령 줄 초기화 메서드는 ClickOnce로 실행 중인지 여부를 감지하므로 사용할 때 코드를 변경할 필요가 없습니다.
  • 자동 생성 /? help : 여기에는 콘솔의 너비를 고려한 멋진 형식이 포함됩니다.
  • 명령 줄 인수를 파일에로드 / 저장 : 여러 번 실행하려는 크고 복잡한 명령 줄 인수 집합이 여러 개있는 경우 특히 유용합니다.

0

저는 Python에 내장 된 라이브러리 인 OptParse에 대한 C # 포트의 팬입니다. 여기에있는 대부분의 다른 제안에 비해 사용하기가 다소 간단하며 자동 구문 분석 외에도 유용한 기능이 많이 포함되어 있습니다.


0

러그 Cmd를 좋아할 것입니다.

사용하기 쉽고 확장 가능한 명령 줄 인수 구문 분석기. 핸들 : 부울, 플러스 / 마이너스, 문자열, 문자열 목록, CSV, 열거.

'/?'에 내장 도움말 모드.

'/ ??'에 내장 및 '/? D'문서 생성기 모드.

static void Main(string[] args) 
{            
    // create the argument parser
    ArgumentParser parser = new ArgumentParser("ArgumentExample", "Example of argument parsing");

    // create the argument for a string
    StringArgument StringArg = new StringArgument("String", "Example string argument", "This argument demonstrates string arguments");

    // add the argument to the parser 
    parser.Add("/", "String", StringArg);

    // parse arguemnts
    parser.Parse(args);

    // did the parser detect a /? argument 
    if (parser.HelpMode == false) 
    {
        // was the string argument defined 
        if (StringArg.Defined == true)
        {
            // write its value
            RC.WriteLine("String argument was defined");
            RC.WriteLine(StringArg.Value);
        }
    }
}

편집 : 이것은 내 프로젝트 이므로이 답변은 타사의 보증으로 간주되어서는 안됩니다. 그것은 내가 작성하는 모든 명령 줄 기반 프로그램에 사용한다고 말했고, 오픈 소스이며 다른 사람들이 이로부터 혜택을받을 수 있기를 바랍니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.