2016-07-26 21 views
1

Angenommen, meine Kommandozeilen-Utility-Nachrichten mit folgenden Struktur sendenWie wird die Syntax für komplexe Befehlszeilenoptionen entworfen?

struct Message { 
    uint32_t ip; 
    string id; 
} 

Benutzer in der Lage sein muss, Host (IPv4- + Port) und Filter auf ip und id pro Host (erlaubt Netzwerk angeben Adressen und zu sendende IDs). Wie kann ich klare Syntax für solch eine komplexe Option entwerfen?

Das Beste, was ich erfunden ist:

--msg-send="192.168.10.2:8080;ip_isin=10.0.0.0/8,172.16.0.1/16;id=one,two" 

Aber etwas stimmt nicht mit ihm ... zum Beispiel = Zeichen innen ist ärgerlich ... Ist „der Königsweg“ für die Kommandozeilenargumente jemand weiß, mit komplexer Struktur?

andere Variante ist besser:

--msg-send="192.168.10.2:8080{ip 10.0.0.0/8,172.168.0.0/16}{id one,two}" 

UPD: msg-send Plural ist, kann der Benutzer mehrere Hosts mit unterschiedlichen Filtern gesetzt

+0

Sind Sie mit C? – Sumit

+0

@ Sumit, spielt es eine Rolle? Ja, ich benutze getopt. – hoxnox

+1

Es könnte Ihre Frage helfen. Das hier verwendete "c" -Tag ist beliebter als die von Ihnen verwendeten Tags. – Sumit

Antwort

3

Es gibt keinen Königsweg, aber wenn sie mit Menschen interagieren Sie sollte versuchen, dem menschlichen Denken zu folgen. Sie versuchen, den Benutzer dazu zu bringen, eine komplexe Struktur, die dem JSON-Format ähnelt, von Hand zu erstellen. Menschen sind schlecht darin. Von Ihrer Erklärung erhalte ich, dass diese Struktur besteht aus drei Komponenten:

  1. Host + Port
  2. Liste von IP-Adressen (durch Subnetze, CIDR Notationen, Ranger, was auch immer Ihr Programm umgehen kann)
  3. Liste der Zeichenfolge ids

So könnte es logisch, den Benutzer zu verlangen, dass diese Parameter separat, zum Beispiel

msg_util.exe --host 192.168.10.2:8080 --allowed_ips 10.0.0.0/8,172.16.0.1/16 --allowed_ids one,two 
eingeben

Wenn Sie viele Hosts mit entsprechenden erlaubten IPs und IDs haben, ist es ziemlich schwierig, sie nur über die Befehlszeile einzugeben, und viele Netzwerkprogramme (wie dig) greifen auf Eingaben von Dateien zurück. Zum Beispiel könnten Sie

msg_util.exe --file --host hosts_file --allowed_ips ips_file --allowed_ids ids_file 

haben, wo jede Zeile von hosts_file hat corrseponding Optionen in ips_file und ids_file

+0

Ja, msg-send ist Plural. Entschuldigung, ich habe es in der Frage nicht erwähnt - aktualisiert. – hoxnox