Steven D'Aprano added the comment:
On Tue, Jul 26, 2016 at 03:27:29PM +0000, R. David Murray wrote:
[...]
> getopt is explicitly emulating the C getopt
There are lots of differences between the C getopt and the Python
version, and the Python version is described as offering an API
"designed to be familiar" to uses of the C version, not to emulate all
the idiosyncrasies of the C version. For instance, the Python version
raises an exception on errors, rather than returning -1; the C version
requires argc ("argument count"), but the Python version doesn't.
But most critically, the C version DOES strip whitespace from long
arguments. On my Centos box, it only strips *trailing* spaces, not
leading spaces, but it does strip them. So if your argument is that we
must do what the C getopt does, then we must likewise at least strip
trailing spaces.
Attached is a demo, adapted from the code given by `man 3 getopt`.
[steve@ando ~]$ gcc getopdemo.c
[steve@ando ~]$ ./a.out "-- spam" 1 --eggs 2 "-- cheese" 3
option spam with arg 1
option eggs with arg 2
option cheese with arg 3
If Serhiy is going to insist that getopt.py must follow the C getopt
precisely, then the failure to strip trailing spaces is certainly a bug.
----------
Added file: http://bugs.python.org/file43898/getopdemo.c
_______________________________________
Python tracker <[email protected]>
<http://bugs.python.org/issue27619>
_______________________________________ #include <stdio.h> /* for printf */
#include <stdlib.h> /* for exit */
#include <getopt.h>
int
main (int argc, char **argv) {
int c;
int digit_optind = 0;
while (1) {
int this_option_optind = optind ? optind : 1;
int option_index = 0;
static struct option long_options[] = {
{" spam ", 1, 0, 0},
{"eggs ", 1, 0, 0},
{" cheese", 1, 0, 0},
{0, 0, 0, 0}
};
c = getopt_long (argc, argv, "",
long_options, &option_index);
if (c == -1)
break;
switch (c) {
case 0:
printf ("option %s", long_options[option_index].name);
if (optarg)
printf (" with arg %s", optarg);
printf ("\n");
break;
case '?':
break;
default:
printf ("?? getopt returned character code 0%o ??\n", c);
}
}
exit (0);
}
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com