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/python313/lib64/python3.13/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : //opt/alt/python313/lib64/python3.13/shlex.py
"""A lexical analyzer class for simple shell-like syntaxes."""

# Module and documentation by Eric S. Raymond, 21 Dec 1998
# Input stacking and error message cleanup added by ESR, March 2000
# push_source() and pop_source() made explicit by ESR, January 2001.
# Posix compliance, split(), string arguments, and
# iterator interface by Gustavo Niemeyer, April 2003.
# changes to tokenize more like Posix shells by Vinay Sajip, July 2016.

import os
import re
import sys
from collections import deque

from io import StringIO

__all__ = ["shlex", "split", "quote", "join"]

class shlex:
    "A lexical analyzer class for simple shell-like syntaxes."
    def __init__(self, instream=None, infile=None, posix=False,
                 punctuation_chars=False):
        if isinstance(instream, str):
            instream = StringIO(instream)
        if instream is not None:
            self.instream = instream
            self.infile = infile
        else:
            self.instream = sys.stdin
            self.infile = None
        self.posix = posix
        if posix:
            self.eof = None
        else:
            self.eof = ''
        self.commenters = '#'
        self.wordchars = ('abcdfeghijklmnopqrstuvwxyz'
                          'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_')
        if self.posix:
            self.wordchars += ('ßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿ'
                               'ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞ')
        self.whitespace = ' \t\r\n'
        self.whitespace_split = False
        self.quotes = '\'"'
        self.escape = '\\'
        self.escapedquotes = '"'
        self.state = ' '
        self.pushback = deque()
        self.lineno = 1
        self.debug = 0
        self.token = ''
        self.filestack = deque()
        self.source = None
        if not punctuation_chars:
            punctuation_chars = ''
        elif punctuation_chars is True:
            punctuation_chars = '();<>|&'
        self._punctuation_chars = punctuation_chars
        if punctuation_chars:
            # _pushback_chars is a push back queue used by lookahead logic
            self._pushback_chars = deque()
            # these chars added because allowed in file names, args, wildcards
            self.wordchars += '~-./*?='
            #remove any punctuation chars from wordchars
            t = self.wordchars.maketrans(dict.fromkeys(punctuation_chars))
            self.wordchars = self.wordchars.translate(t)

    @property
    def punctuation_chars(self):
        return self._punctuation_chars

    def push_token(self, tok):
        "Push a token onto the stack popped by the get_token method"
        if self.debug >= 1:
            print("shlex: pushing token " + repr(tok))
        self.pushback.appendleft(tok)

    def push_source(self, newstream, newfile=None):
        "Push an input source onto the lexer's input source stack."
        if isinstance(newstream, str):
            newstream = StringIO(newstream)
        self.filestack.appendleft((self.infile, self.instream, self.lineno))
        self.infile = newfile
        self.instream = newstream
        self.lineno = 1
        if self.debug:
            if newfile is not None:
                print('shlex: pushing to file %s' % (self.infile,))
            else:
                print('shlex: pushing to stream %s' % (self.instream,))

    def pop_source(self):
        "Pop the input source stack."
        self.instream.close()
        (self.infile, self.instream, self.lineno) = self.filestack.popleft()
        if self.debug:
            print('shlex: popping to %s, line %d' \
                  % (self.instream, self.lineno))
        self.state = ' '

    def get_token(self):
        "Get a token from the input stream (or from stack if it's nonempty)"
        if self.pushback:
            tok = self.pushback.popleft()
            if self.debug >= 1:
                print("shlex: popping token " + repr(tok))
            return tok
        # No pushback.  Get a token.
        raw = self.read_token()
        # Handle inclusions
        if self.source is not None:
            while raw == self.source:
                spec = self.sourcehook(self.read_token())
                if spec:
                    (newfile, newstream) = spec
                    self.push_source(newstream, newfile)
                raw = self.get_token()
        # Maybe we got EOF instead?
        while raw == self.eof:
            if not self.filestack:
                return self.eof
            else:
                self.pop_source()
                raw = self.get_token()
        # Neither inclusion nor EOF
        if self.debug >= 1:
            if raw != self.eof:
                print("shlex: token=" + repr(raw))
            else:
                print("shlex: token=EOF")
        return raw

    def read_token(self):
        quoted = False
        escapedstate = ' '
        while True:
            if self.punctuation_chars and self._pushback_chars:
                nextchar = self._pushback_chars.pop()
            else:
                nextchar = self.instream.read(1)
            if nextchar == '\n':
                self.lineno += 1
            if self.debug >= 3:
                print("shlex: in state %r I see character: %r" % (self.state,
                                                                  nextchar))
            if self.state is None:
                self.token = ''        # past end of file
                break
            elif self.state == ' ':
                if not nextchar:
                    self.state = None  # end of file
                    break
                elif nextchar in self.whitespace:
                    if self.debug >= 2:
                        print("shlex: I see whitespace in whitespace state")
                    if self.token or (self.posix and quoted):
                        break   # emit current token
                    else:
                        continue
                elif nextchar in self.commenters:
                    self.instream.readline()
                    self.lineno += 1
                elif self.posix and nextchar in self.escape:
                    escapedstate = 'a'
                    self.state = nextchar
                elif nextchar in self.wordchars:
                    self.token = nextchar
                    self.state = 'a'
                elif nextchar in self.punctuation_chars:
                    self.token = nextchar
                    self.state = 'c'
                elif nextchar in self.quotes:
                    if not self.posix:
                        self.token = nextchar
                    self.state = nextchar
                elif self.whitespace_split:
                    self.token = nextchar
                    self.state = 'a'
                else:
                    self.token = nextchar
                    if self.token or (self.posix and quoted):
                        break   # emit current token
                    else:
                        continue
            elif self.state in self.quotes:
                quoted = True
                if not nextchar:      # end of file
                    if self.debug >= 2:
                        print("shlex: I see EOF in quotes state")
                    # XXX what error should be raised here?
                    raise ValueError("No closing quotation")
                if nextchar == self.state:
                    if not self.posix:
                        self.token += nextchar
                        self.state = ' '
                        break
                    else:
                        self.state = 'a'
                elif (self.posix and nextchar in self.escape and self.state
                      in self.escapedquotes):
                    escapedstate = self.state
                    self.state = nextchar
                else:
                    self.token += nextchar
            elif self.state in self.escape:
                if not nextchar:      # end of file
                    if self.debug >= 2:
                        print("shlex: I see EOF in escape state")
                    # XXX what error should be raised here?
                    raise ValueError("No escaped character")
                # In posix shells, only the quote itself or the escape
                # character may be escaped within quotes.
                if (escapedstate in self.quotes and
                        nextchar != self.state and nextchar != escapedstate):
                    self.token += self.state
                self.token += nextchar
                self.state = escapedstate
            elif self.state in ('a', 'c'):
                if not nextchar:
                    self.state = None   # end of file
                    break
                elif nextchar in self.whitespace:
                    if self.debug >= 2:
                        print("shlex: I see whitespace in word state")
                    self.state = ' '
                    if self.token or (self.posix and quoted):
                        break   # emit current token
                    else:
                        continue
                elif nextchar in self.commenters:
                    self.instream.readline()
                    self.lineno += 1
                    if self.posix:
                        self.state = ' '
                        if self.token or (self.posix and quoted):
                            break   # emit current token
                        else:
                            continue
                elif self.state == 'c':
                    if nextchar in self.punctuation_chars:
                        self.token += nextchar
                    else:
                        if nextchar not in self.whitespace:
                            self._pushback_chars.append(nextchar)
                        self.state = ' '
                        break
                elif self.posix and nextchar in self.quotes:
                    self.state = nextchar
                elif self.posix and nextchar in self.escape:
                    escapedstate = 'a'
                    self.state = nextchar
                elif (nextchar in self.wordchars or nextchar in self.quotes
                      or (self.whitespace_split and
                          nextchar not in self.punctuation_chars)):
                    self.token += nextchar
                else:
                    if self.punctuation_chars:
                        self._pushback_chars.append(nextchar)
                    else:
                        self.pushback.appendleft(nextchar)
                    if self.debug >= 2:
                        print("shlex: I see punctuation in word state")
                    self.state = ' '
                    if self.token or (self.posix and quoted):
                        break   # emit current token
                    else:
                        continue
        result = self.token
        self.token = ''
        if self.posix and not quoted and result == '':
            result = None
        if self.debug > 1:
            if result:
                print("shlex: raw token=" + repr(result))
            else:
                print("shlex: raw token=EOF")
        return result

    def sourcehook(self, newfile):
        "Hook called on a filename to be sourced."
        if newfile[0] == '"':
            newfile = newfile[1:-1]
        # This implements cpp-like semantics for relative-path inclusion.
        if isinstance(self.infile, str) and not os.path.isabs(newfile):
            newfile = os.path.join(os.path.dirname(self.infile), newfile)
        return (newfile, open(newfile, "r"))

    def error_leader(self, infile=None, lineno=None):
        "Emit a C-compiler-like, Emacs-friendly error-message leader."
        if infile is None:
            infile = self.infile
        if lineno is None:
            lineno = self.lineno
        return "\"%s\", line %d: " % (infile, lineno)

    def __iter__(self):
        return self

    def __next__(self):
        token = self.get_token()
        if token == self.eof:
            raise StopIteration
        return token

def split(s, comments=False, posix=True):
    """Split the string *s* using shell-like syntax."""
    if s is None:
        raise ValueError("s argument must not be None")
    lex = shlex(s, posix=posix)
    lex.whitespace_split = True
    if not comments:
        lex.commenters = ''
    return list(lex)


def join(split_command):
    """Return a shell-escaped string from *split_command*."""
    return ' '.join(quote(arg) for arg in split_command)


_find_unsafe = re.compile(r'[^\w@%+=:,./-]', re.ASCII).search

def quote(s):
    """Return a shell-escaped version of the string *s*."""
    if not s:
        return "''"
    if _find_unsafe(s) is None:
        return s

    # use single quotes, and put single quotes into double quotes
    # the string $'b is then quoted as '$'"'"'b'
    return "'" + s.replace("'", "'\"'\"'") + "'"


def _print_tokens(lexer):
    while tt := lexer.get_token():
        print("Token: " + repr(tt))

if __name__ == '__main__':
    if len(sys.argv) == 1:
        _print_tokens(shlex())
    else:
        fn = sys.argv[1]
        with open(fn) as f:
            _print_tokens(shlex(f, fn))
Name
Size
Permissions
Options
__pycache__
--
drwxr-xr-x
_pyrepl
--
drwxr-xr-x
asyncio
--
drwxr-xr-x
collections
--
drwxr-xr-x
concurrent
--
drwxr-xr-x
config-3.13-x86_64-linux-gnu
--
drwxr-xr-x
ctypes
--
drwxr-xr-x
curses
--
drwxr-xr-x
dbm
--
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
logging
--
drwxr-xr-x
multiprocessing
--
drwxr-xr-x
pathlib
--
drwxr-xr-x
pydoc_data
--
drwxr-xr-x
re
--
drwxr-xr-x
site-packages
--
drwxr-xr-x
sqlite3
--
drwxr-xr-x
sysconfig
--
drwxr-xr-x
tomllib
--
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
zipfile
--
drwxr-xr-x
zoneinfo
--
drwxr-xr-x
LICENSE.txt
13.485 KB
-rw-r--r--
__future__.py
5.096 KB
-rw-r--r--
__hello__.py
0.222 KB
-rw-r--r--
_aix_support.py
3.927 KB
-rw-r--r--
_android_support.py
6.733 KB
-rw-r--r--
_apple_support.py
2.203 KB
-rw-r--r--
_collections_abc.py
31.508 KB
-rw-r--r--
_colorize.py
2.781 KB
-rw-r--r--
_compat_pickle.py
8.53 KB
-rw-r--r--
_compression.py
5.548 KB
-rw-r--r--
_ios_support.py
2.609 KB
-rw-r--r--
_markupbase.py
14.31 KB
-rw-r--r--
_opcode_metadata.py
9.048 KB
-rw-r--r--
_osx_support.py
21.507 KB
-rw-r--r--
_py_abc.py
6.044 KB
-rw-r--r--
_pydatetime.py
89.834 KB
-rw-r--r--
_pydecimal.py
221.956 KB
-rw-r--r--
_pyio.py
91.497 KB
-rw-r--r--
_pylong.py
11.553 KB
-rw-r--r--
_sitebuiltins.py
3.055 KB
-rw-r--r--
_strptime.py
28.694 KB
-rw-r--r--
_sysconfigdata__linux_x86_64-linux-gnu.py
65.726 KB
-rw-r--r--
_sysconfigdata_d_linux_x86_64-linux-gnu.py
65.708 KB
-rw-r--r--
_threading_local.py
4.261 KB
-rw-r--r--
_weakrefset.py
5.755 KB
-rw-r--r--
abc.py
6.385 KB
-rw-r--r--
antigravity.py
0.488 KB
-rw-r--r--
argparse.py
99.278 KB
-rw-r--r--
ast.py
63.808 KB
-rw-r--r--
base64.py
21.136 KB
-rwxr-xr-x
bdb.py
34.515 KB
-rw-r--r--
bisect.py
3.343 KB
-rw-r--r--
bz2.py
11.688 KB
-rw-r--r--
cProfile.py
6.481 KB
-rwxr-xr-x
calendar.py
25.466 KB
-rw-r--r--
cmd.py
14.957 KB
-rw-r--r--
code.py
12.861 KB
-rw-r--r--
codecs.py
36.063 KB
-rw-r--r--
codeop.py
5.691 KB
-rw-r--r--
colorsys.py
3.967 KB
-rw-r--r--
compileall.py
20.181 KB
-rw-r--r--
configparser.py
52.569 KB
-rw-r--r--
contextlib.py
27.149 KB
-rw-r--r--
contextvars.py
0.126 KB
-rw-r--r--
copy.py
8.765 KB
-rw-r--r--
copyreg.py
7.436 KB
-rw-r--r--
csv.py
18.729 KB
-rw-r--r--
dataclasses.py
63.032 KB
-rw-r--r--
datetime.py
0.262 KB
-rw-r--r--
decimal.py
2.732 KB
-rw-r--r--
difflib.py
81.414 KB
-rw-r--r--
dis.py
40.002 KB
-rw-r--r--
doctest.py
106.771 KB
-rw-r--r--
enum.py
83.572 KB
-rw-r--r--
filecmp.py
10.402 KB
-rw-r--r--
fileinput.py
15.349 KB
-rw-r--r--
fnmatch.py
6.035 KB
-rw-r--r--
fractions.py
39.083 KB
-rw-r--r--
ftplib.py
33.921 KB
-rw-r--r--
functools.py
38.206 KB
-rw-r--r--
genericpath.py
6.101 KB
-rw-r--r--
getopt.py
7.313 KB
-rw-r--r--
getpass.py
6.087 KB
-rw-r--r--
gettext.py
21.029 KB
-rw-r--r--
glob.py
19.258 KB
-rw-r--r--
graphlib.py
9.422 KB
-rw-r--r--
gzip.py
24.056 KB
-rw-r--r--
hashlib.py
9.225 KB
-rw-r--r--
heapq.py
22.484 KB
-rw-r--r--
hmac.py
7.535 KB
-rw-r--r--
imaplib.py
52.773 KB
-rw-r--r--
inspect.py
125.27 KB
-rw-r--r--
io.py
3.498 KB
-rw-r--r--
ipaddress.py
79.722 KB
-rw-r--r--
keyword.py
1.048 KB
-rw-r--r--
linecache.py
7.113 KB
-rw-r--r--
locale.py
77.181 KB
-rw-r--r--
lzma.py
13.085 KB
-rw-r--r--
mailbox.py
79.73 KB
-rw-r--r--
mimetypes.py
23.292 KB
-rw-r--r--
modulefinder.py
23.234 KB
-rw-r--r--
netrc.py
6.76 KB
-rw-r--r--
ntpath.py
32.037 KB
-rw-r--r--
nturl2path.py
2.318 KB
-rw-r--r--
numbers.py
11.198 KB
-rw-r--r--
opcode.py
2.759 KB
-rw-r--r--
operator.py
10.723 KB
-rw-r--r--
optparse.py
58.954 KB
-rw-r--r--
os.py
40.659 KB
-rw-r--r--
pdb.py
88.807 KB
-rwxr-xr-x
pickle.py
65.388 KB
-rw-r--r--
pickletools.py
91.848 KB
-rw-r--r--
pkgutil.py
17.853 KB
-rw-r--r--
platform.py
46.249 KB
-rwxr-xr-x
plistlib.py
29.096 KB
-rw-r--r--
poplib.py
14.262 KB
-rw-r--r--
posixpath.py
17.93 KB
-rw-r--r--
pprint.py
23.592 KB
-rw-r--r--
profile.py
22.61 KB
-rwxr-xr-x
pstats.py
28.609 KB
-rw-r--r--
pty.py
5.993 KB
-rw-r--r--
py_compile.py
7.653 KB
-rw-r--r--
pyclbr.py
11.129 KB
-rw-r--r--
pydoc.py
107.498 KB
-rwxr-xr-x
queue.py
13.165 KB
-rw-r--r--
quopri.py
7.028 KB
-rwxr-xr-x
random.py
36.139 KB
-rw-r--r--
reprlib.py
7.023 KB
-rw-r--r--
rlcompleter.py
7.732 KB
-rw-r--r--
runpy.py
12.583 KB
-rw-r--r--
sched.py
6.202 KB
-rw-r--r--
secrets.py
1.938 KB
-rw-r--r--
selectors.py
19.001 KB
-rw-r--r--
shelve.py
8.604 KB
-rw-r--r--
shlex.py
13.04 KB
-rw-r--r--
shutil.py
56.116 KB
-rw-r--r--
signal.py
2.437 KB
-rw-r--r--
site.py
24.969 KB
-rw-r--r--
smtplib.py
42.524 KB
-rwxr-xr-x
socket.py
36.874 KB
-rw-r--r--
socketserver.py
27.407 KB
-rw-r--r--
sre_compile.py
0.226 KB
-rw-r--r--
sre_constants.py
0.227 KB
-rw-r--r--
sre_parse.py
0.224 KB
-rw-r--r--
ssl.py
51.471 KB
-rw-r--r--
stat.py
6.003 KB
-rw-r--r--
statistics.py
60.382 KB
-rw-r--r--
string.py
11.51 KB
-rw-r--r--
stringprep.py
12.614 KB
-rw-r--r--
struct.py
0.251 KB
-rw-r--r--
subprocess.py
87.389 KB
-rw-r--r--
symtable.py
13.874 KB
-rw-r--r--
tabnanny.py
11.274 KB
-rwxr-xr-x
tarfile.py
111.421 KB
-rwxr-xr-x
tempfile.py
31.607 KB
-rw-r--r--
textwrap.py
19.472 KB
-rw-r--r--
this.py
0.979 KB
-rw-r--r--
threading.py
53.949 KB
-rw-r--r--
timeit.py
13.161 KB
-rwxr-xr-x
token.py
2.431 KB
-rw-r--r--
tokenize.py
21.063 KB
-rw-r--r--
trace.py
29.031 KB
-rwxr-xr-x
traceback.py
64.965 KB
-rw-r--r--
tracemalloc.py
17.624 KB
-rw-r--r--
tty.py
1.987 KB
-rw-r--r--
types.py
10.944 KB
-rw-r--r--
typing.py
129.607 KB
-rw-r--r--
uuid.py
28.458 KB
-rw-r--r--
warnings.py
26.316 KB
-rw-r--r--
wave.py
22.691 KB
-rw-r--r--
weakref.py
21.009 KB
-rw-r--r--
webbrowser.py
23.729 KB
-rwxr-xr-x
zipapp.py
8.416 KB
-rw-r--r--
zipimport.py
32.119 KB
-rw-r--r--