Psyduck - 可達鴨 之 鴨力山大2


Server : LiteSpeed
System : Linux premium217.web-hosting.com 4.18.0-553.54.1.lve.el8.x86_64 #1 SMP Wed Jun 4 13:01:13 UTC 2025 x86_64
User : alloknri ( 880)
PHP Version : 8.1.34
Disable Function : NONE
Directory :  /opt/alt/python39/lib64/python3.9/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : //opt/alt/python39/lib64/python3.9/getopt.py
"""Parser for command line options.

This module helps scripts to parse the command line arguments in
sys.argv.  It supports the same conventions as the Unix getopt()
function (including the special meanings of arguments of the form `-'
and `--').  Long options similar to those supported by GNU software
may be used as well via an optional third argument.  This module
provides two functions and an exception:

getopt() -- Parse command line options
gnu_getopt() -- Like getopt(), but allow option and non-option arguments
to be intermixed.
GetoptError -- exception (class) raised with 'opt' attribute, which is the
option involved with the exception.
"""

# Long option support added by Lars Wirzenius <liw@iki.fi>.
#
# Gerrit Holl <gerrit@nl.linux.org> moved the string-based exceptions
# to class-based exceptions.
#
# Peter Åstrand <astrand@lysator.liu.se> added gnu_getopt().
#
# TODO for gnu_getopt():
#
# - GNU getopt_long_only mechanism
# - allow the caller to specify ordering
# - RETURN_IN_ORDER option
# - GNU extension with '-' as first character of option string
# - optional arguments, specified by double colons
# - an option string with a W followed by semicolon should
#   treat "-W foo" as "--foo"

__all__ = ["GetoptError","error","getopt","gnu_getopt"]

import os
try:
    from gettext import gettext as _
except ImportError:
    # Bootstrapping Python: gettext's dependencies not built yet
    def _(s): return s

class GetoptError(Exception):
    opt = ''
    msg = ''
    def __init__(self, msg, opt=''):
        self.msg = msg
        self.opt = opt
        Exception.__init__(self, msg, opt)

    def __str__(self):
        return self.msg

error = GetoptError # backward compatibility

def getopt(args, shortopts, longopts = []):
    """getopt(args, options[, long_options]) -> opts, args

    Parses command line options and parameter list.  args is the
    argument list to be parsed, without the leading reference to the
    running program.  Typically, this means "sys.argv[1:]".  shortopts
    is the string of option letters that the script wants to
    recognize, with options that require an argument followed by a
    colon (i.e., the same format that Unix getopt() uses).  If
    specified, longopts is a list of strings with the names of the
    long options which should be supported.  The leading '--'
    characters should not be included in the option name.  Options
    which require an argument should be followed by an equal sign
    ('=').

    The return value consists of two elements: the first is a list of
    (option, value) pairs; the second is the list of program arguments
    left after the option list was stripped (this is a trailing slice
    of the first argument).  Each option-and-value pair returned has
    the option as its first element, prefixed with a hyphen (e.g.,
    '-x'), and the option argument as its second element, or an empty
    string if the option has no argument.  The options occur in the
    list in the same order in which they were found, thus allowing
    multiple occurrences.  Long and short options may be mixed.

    """

    opts = []
    if type(longopts) == type(""):
        longopts = [longopts]
    else:
        longopts = list(longopts)
    while args and args[0].startswith('-') and args[0] != '-':
        if args[0] == '--':
            args = args[1:]
            break
        if args[0].startswith('--'):
            opts, args = do_longs(opts, args[0][2:], longopts, args[1:])
        else:
            opts, args = do_shorts(opts, args[0][1:], shortopts, args[1:])

    return opts, args

def gnu_getopt(args, shortopts, longopts = []):
    """getopt(args, options[, long_options]) -> opts, args

    This function works like getopt(), except that GNU style scanning
    mode is used by default. This means that option and non-option
    arguments may be intermixed. The getopt() function stops
    processing options as soon as a non-option argument is
    encountered.

    If the first character of the option string is `+', or if the
    environment variable POSIXLY_CORRECT is set, then option
    processing stops as soon as a non-option argument is encountered.

    """

    opts = []
    prog_args = []
    if isinstance(longopts, str):
        longopts = [longopts]
    else:
        longopts = list(longopts)

    # Allow options after non-option arguments?
    if shortopts.startswith('+'):
        shortopts = shortopts[1:]
        all_options_first = True
    elif os.environ.get("POSIXLY_CORRECT"):
        all_options_first = True
    else:
        all_options_first = False

    while args:
        if args[0] == '--':
            prog_args += args[1:]
            break

        if args[0][:2] == '--':
            opts, args = do_longs(opts, args[0][2:], longopts, args[1:])
        elif args[0][:1] == '-' and args[0] != '-':
            opts, args = do_shorts(opts, args[0][1:], shortopts, args[1:])
        else:
            if all_options_first:
                prog_args += args
                break
            else:
                prog_args.append(args[0])
                args = args[1:]

    return opts, prog_args

def do_longs(opts, opt, longopts, args):
    try:
        i = opt.index('=')
    except ValueError:
        optarg = None
    else:
        opt, optarg = opt[:i], opt[i+1:]

    has_arg, opt = long_has_args(opt, longopts)
    if has_arg:
        if optarg is None:
            if not args:
                raise GetoptError(_('option --%s requires argument') % opt, opt)
            optarg, args = args[0], args[1:]
    elif optarg is not None:
        raise GetoptError(_('option --%s must not have an argument') % opt, opt)
    opts.append(('--' + opt, optarg or ''))
    return opts, args

# Return:
#   has_arg?
#   full option name
def long_has_args(opt, longopts):
    possibilities = [o for o in longopts if o.startswith(opt)]
    if not possibilities:
        raise GetoptError(_('option --%s not recognized') % opt, opt)
    # Is there an exact match?
    if opt in possibilities:
        return False, opt
    elif opt + '=' in possibilities:
        return True, opt
    # No exact match, so better be unique.
    if len(possibilities) > 1:
        # XXX since possibilities contains all valid continuations, might be
        # nice to work them into the error msg
        raise GetoptError(_('option --%s not a unique prefix') % opt, opt)
    assert len(possibilities) == 1
    unique_match = possibilities[0]
    has_arg = unique_match.endswith('=')
    if has_arg:
        unique_match = unique_match[:-1]
    return has_arg, unique_match

def do_shorts(opts, optstring, shortopts, args):
    while optstring != '':
        opt, optstring = optstring[0], optstring[1:]
        if short_has_arg(opt, shortopts):
            if optstring == '':
                if not args:
                    raise GetoptError(_('option -%s requires argument') % opt,
                                      opt)
                optstring, args = args[0], args[1:]
            optarg, optstring = optstring, ''
        else:
            optarg = ''
        opts.append(('-' + opt, optarg))
    return opts, args

def short_has_arg(opt, shortopts):
    for i in range(len(shortopts)):
        if opt == shortopts[i] != ':':
            return shortopts.startswith(':', i+1)
    raise GetoptError(_('option -%s not recognized') % opt, opt)

if __name__ == '__main__':
    import sys
    print(getopt(sys.argv[1:], "a:b", ["alpha=", "beta"]))
Name
Size
Permissions
Options
__pycache__
--
drwxr-xr-x
asyncio
--
drwxr-xr-x
collections
--
drwxr-xr-x
concurrent
--
drwxr-xr-x
config-3.9-x86_64-linux-gnu
--
drwxr-xr-x
ctypes
--
drwxr-xr-x
curses
--
drwxr-xr-x
dbm
--
drwxr-xr-x
distutils
--
drwxr-xr-x
email
--
drwxr-xr-x
encodings
--
drwxr-xr-x
ensurepip
--
drwxr-xr-x
html
--
drwxr-xr-x
http
--
drwxr-xr-x
importlib
--
drwxr-xr-x
json
--
drwxr-xr-x
lib-dynload
--
drwxr-xr-x
lib2to3
--
drwxr-xr-x
logging
--
drwxr-xr-x
multiprocessing
--
drwxr-xr-x
pydoc_data
--
drwxr-xr-x
site-packages
--
drwxr-xr-x
sqlite3
--
drwxr-xr-x
unittest
--
drwxr-xr-x
urllib
--
drwxr-xr-x
venv
--
drwxr-xr-x
wsgiref
--
drwxr-xr-x
xml
--
drwxr-xr-x
xmlrpc
--
drwxr-xr-x
zoneinfo
--
drwxr-xr-x
LICENSE.txt
13.61 KB
-rw-r--r--
__future__.py
5.026 KB
-rw-r--r--
__phello__.foo.py
0.063 KB
-rw-r--r--
_aix_support.py
3.31 KB
-rw-r--r--
_bootlocale.py
1.759 KB
-rw-r--r--
_bootsubprocess.py
2.612 KB
-rw-r--r--
_collections_abc.py
28.686 KB
-rw-r--r--
_compat_pickle.py
8.544 KB
-rw-r--r--
_compression.py
5.215 KB
-rw-r--r--
_markupbase.py
14.28 KB
-rw-r--r--
_osx_support.py
21.263 KB
-rw-r--r--
_py_abc.py
6.044 KB
-rw-r--r--
_pydecimal.py
223.307 KB
-rw-r--r--
_pyio.py
91.129 KB
-rw-r--r--
_sitebuiltins.py
3.042 KB
-rw-r--r--
_strptime.py
24.685 KB
-rw-r--r--
_sysconfigdata__linux_x86_64-linux-gnu.py
39.586 KB
-rw-r--r--
_sysconfigdata_d_linux_x86_64-linux-gnu.py
39.328 KB
-rw-r--r--
_threading_local.py
7.051 KB
-rw-r--r--
_weakrefset.py
5.784 KB
-rw-r--r--
abc.py
4.805 KB
-rw-r--r--
aifc.py
31.841 KB
-rw-r--r--
antigravity.py
0.488 KB
-rw-r--r--
argparse.py
95.819 KB
-rw-r--r--
ast.py
54.938 KB
-rw-r--r--
asynchat.py
11.056 KB
-rw-r--r--
asyncore.py
19.631 KB
-rw-r--r--
base64.py
19.406 KB
-rwxr-xr-x
bdb.py
30.653 KB
-rw-r--r--
binhex.py
14.438 KB
-rw-r--r--
bisect.py
2.295 KB
-rw-r--r--
bz2.py
12.155 KB
-rw-r--r--
cProfile.py
6.209 KB
-rwxr-xr-x
calendar.py
24.25 KB
-rw-r--r--
cgi.py
33.149 KB
-rwxr-xr-x
cgitb.py
11.813 KB
-rw-r--r--
chunk.py
5.308 KB
-rw-r--r--
cmd.py
14.512 KB
-rw-r--r--
code.py
10.373 KB
-rw-r--r--
codecs.py
35.813 KB
-rw-r--r--
codeop.py
6.178 KB
-rw-r--r--
colorsys.py
3.969 KB
-rw-r--r--
compileall.py
19.634 KB
-rw-r--r--
configparser.py
53.305 KB
-rw-r--r--
contextlib.py
24.047 KB
-rw-r--r--
contextvars.py
0.126 KB
-rw-r--r--
copy.py
8.447 KB
-rw-r--r--
copyreg.py
7.104 KB
-rw-r--r--
crypt.py
3.729 KB
-rw-r--r--
csv.py
15.766 KB
-rw-r--r--
dataclasses.py
48.424 KB
-rw-r--r--
datetime.py
87.087 KB
-rw-r--r--
decimal.py
0.313 KB
-rw-r--r--
difflib.py
81.354 KB
-rw-r--r--
dis.py
20.088 KB
-rw-r--r--
doctest.py
102.117 KB
-rw-r--r--
enum.py
38.516 KB
-rw-r--r--
filecmp.py
9.789 KB
-rw-r--r--
fileinput.py
14.444 KB
-rw-r--r--
fnmatch.py
5.863 KB
-rw-r--r--
formatter.py
14.788 KB
-rw-r--r--
fractions.py
23.753 KB
-rw-r--r--
ftplib.py
34.664 KB
-rw-r--r--
functools.py
37.97 KB
-rw-r--r--
genericpath.py
5.123 KB
-rw-r--r--
getopt.py
7.313 KB
-rw-r--r--
getpass.py
5.85 KB
-rw-r--r--
gettext.py
26.627 KB
-rw-r--r--
glob.py
5.687 KB
-rw-r--r--
graphlib.py
9.349 KB
-rw-r--r--
gzip.py
21.262 KB
-rw-r--r--
hashlib.py
9.775 KB
-rw-r--r--
heapq.py
22.341 KB
-rw-r--r--
hmac.py
6.839 KB
-rw-r--r--
imaplib.py
53.961 KB
-rw-r--r--
imghdr.py
3.719 KB
-rw-r--r--
imp.py
10.289 KB
-rw-r--r--
inspect.py
115.464 KB
-rw-r--r--
io.py
3.458 KB
-rw-r--r--
ipaddress.py
79.027 KB
-rw-r--r--
keyword.py
1.022 KB
-rw-r--r--
linecache.py
5.333 KB
-rw-r--r--
locale.py
76.437 KB
-rw-r--r--
lzma.py
12.921 KB
-rw-r--r--
mailbox.py
76.947 KB
-rw-r--r--
mailcap.py
8.902 KB
-rw-r--r--
mimetypes.py
21.059 KB
-rw-r--r--
modulefinder.py
23.829 KB
-rw-r--r--
netrc.py
5.436 KB
-rw-r--r--
nntplib.py
40.062 KB
-rw-r--r--
ntpath.py
27.597 KB
-rw-r--r--
nturl2path.py
2.819 KB
-rw-r--r--
numbers.py
10.096 KB
-rw-r--r--
opcode.py
5.527 KB
-rw-r--r--
operator.py
10.499 KB
-rw-r--r--
optparse.py
58.954 KB
-rw-r--r--
os.py
38.149 KB
-rw-r--r--
pathlib.py
49.936 KB
-rw-r--r--
pdb.py
61.768 KB
-rwxr-xr-x
pickle.py
63.398 KB
-rw-r--r--
pickletools.py
91.295 KB
-rw-r--r--
pipes.py
8.707 KB
-rw-r--r--
pkgutil.py
23.707 KB
-rw-r--r--
platform.py
39.662 KB
-rwxr-xr-x
plistlib.py
27.586 KB
-rw-r--r--
poplib.py
14.842 KB
-rw-r--r--
posixpath.py
15.892 KB
-rw-r--r--
pprint.py
21.999 KB
-rw-r--r--
profile.py
22.357 KB
-rwxr-xr-x
pstats.py
28.639 KB
-rw-r--r--
pty.py
4.694 KB
-rw-r--r--
py_compile.py
8.011 KB
-rw-r--r--
pyclbr.py
14.897 KB
-rw-r--r--
pydoc.py
107.043 KB
-rwxr-xr-x
queue.py
11.227 KB
-rw-r--r--
quopri.py
7.108 KB
-rwxr-xr-x
random.py
30.746 KB
-rw-r--r--
re.py
15.489 KB
-rw-r--r--
reprlib.py
5.144 KB
-rw-r--r--
rlcompleter.py
7.469 KB
-rw-r--r--
runpy.py
12.777 KB
-rw-r--r--
sched.py
6.291 KB
-rw-r--r--
secrets.py
1.988 KB
-rw-r--r--
selectors.py
19.078 KB
-rw-r--r--
shelve.py
8.327 KB
-rw-r--r--
shlex.py
13.185 KB
-rw-r--r--
shutil.py
51.787 KB
-rw-r--r--
signal.py
2.381 KB
-rw-r--r--
site.py
21.332 KB
-rw-r--r--
smtpd.py
34.018 KB
-rwxr-xr-x
smtplib.py
44.354 KB
-rwxr-xr-x
sndhdr.py
6.933 KB
-rw-r--r--
socket.py
36.05 KB
-rw-r--r--
socketserver.py
26.656 KB
-rw-r--r--
sre_compile.py
27.317 KB
-rw-r--r--
sre_constants.py
7.009 KB
-rw-r--r--
sre_parse.py
39.823 KB
-rw-r--r--
ssl.py
51.299 KB
-rw-r--r--
stat.py
5.356 KB
-rw-r--r--
statistics.py
37.175 KB
-rw-r--r--
string.py
10.318 KB
-rw-r--r--
stringprep.py
12.614 KB
-rw-r--r--
struct.py
0.251 KB
-rw-r--r--
subprocess.py
81.605 KB
-rw-r--r--
sunau.py
17.732 KB
-rw-r--r--
symbol.py
2.228 KB
-rw-r--r--
symtable.py
7.72 KB
-rw-r--r--
sysconfig.py
24.33 KB
-rw-r--r--
tabnanny.py
11.151 KB
-rwxr-xr-x
tarfile.py
108.251 KB
-rwxr-xr-x
telnetlib.py
22.709 KB
-rw-r--r--
tempfile.py
27.308 KB
-rw-r--r--
textwrap.py
18.952 KB
-rw-r--r--
this.py
0.979 KB
-rw-r--r--
threading.py
52.906 KB
-rw-r--r--
timeit.py
13.177 KB
-rwxr-xr-x
token.py
2.313 KB
-rw-r--r--
tokenize.py
25.276 KB
-rw-r--r--
trace.py
28.535 KB
-rwxr-xr-x
traceback.py
24.082 KB
-rw-r--r--
tracemalloc.py
17.624 KB
-rw-r--r--
tty.py
0.858 KB
-rw-r--r--
types.py
9.556 KB
-rw-r--r--
typing.py
75.238 KB
-rw-r--r--
uu.py
7.106 KB
-rw-r--r--
uuid.py
26.684 KB
-rw-r--r--
warnings.py
19.227 KB
-rw-r--r--
wave.py
17.582 KB
-rw-r--r--
weakref.py
21.055 KB
-rw-r--r--
webbrowser.py
23.531 KB
-rwxr-xr-x
xdrlib.py
5.774 KB
-rw-r--r--
zipapp.py
7.358 KB
-rw-r--r--
zipfile.py
86.172 KB
-rw-r--r--
zipimport.py
30.044 KB
-rw-r--r--