Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
cpython
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
cpython
Commits
c82a1502
Commit
c82a1502
authored
Dec 24, 1997
by
Guido van Rossum
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Added expect() method which takes a list of regular expressions and an
optional timeout. Also moved some imports around.
parent
accbb33f
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
52 additions
and
2 deletions
+52
-2
Lib/telnetlib.py
Lib/telnetlib.py
+52
-2
No files found.
Lib/telnetlib.py
View file @
c82a1502
...
@@ -30,11 +30,14 @@ Bugs:
...
@@ -30,11 +30,14 @@ Bugs:
To do:
To do:
- option negotiation
- option negotiation
- timeout should be intrinsic to the connection object instead of an
option on one of the read calls only
"""
"""
# Imported modules
# Imported modules
import
sys
import
socket
import
socket
import
select
import
select
import
string
import
string
...
@@ -371,7 +374,6 @@ class Telnet:
...
@@ -371,7 +374,6 @@ class Telnet:
def
interact
(
self
):
def
interact
(
self
):
"""Interaction function, emulates a very dumb telnet client."""
"""Interaction function, emulates a very dumb telnet client."""
import
sys
,
select
while
1
:
while
1
:
rfd
,
wfd
,
xfd
=
select
.
select
([
self
,
sys
.
stdin
],
[],
[])
rfd
,
wfd
,
xfd
=
select
.
select
([
self
,
sys
.
stdin
],
[],
[])
if
sys
.
stdin
in
rfd
:
if
sys
.
stdin
in
rfd
:
...
@@ -388,6 +390,55 @@ class Telnet:
...
@@ -388,6 +390,55 @@ class Telnet:
sys
.
stdout
.
flush
()
sys
.
stdout
.
flush
()
self
.
close
()
self
.
close
()
def
expect
(
self
,
list
,
timeout
=
None
):
"""Read until one from a list of a regular expressions matches.
The first argument is a list of regular expressions, either
compiled (re.RegexObject instances) or uncompiled (strings).
The optional second argument is a timeout, in seconds; default
is no timeout.
Return a tuple of three items: the index in the list of the
first regular expression that matches; the match object
returned; and the text read up till and including the match.
If EOF is read and no text was read, raise EOFError.
Otherwise, when nothing matches, return (-1, None, text) where
text is the text received so far (may be the empty string if a
timeout happened).
If a regular expression ends with a greedy match (e.g. '.*')
or if more than one expression can match the same input, the
results are undeterministic, and may depend on the I/O timing.
"""
re
=
None
list
=
list
[:]
indices
=
range
(
len
(
list
))
for
i
in
indices
:
if
not
hasattr
(
list
[
i
],
"search"
):
if
not
re
:
import
re
list
[
i
]
=
re
.
compile
(
list
[
i
])
while
1
:
self
.
process_rawq
()
for
i
in
indices
:
m
=
list
[
i
].
search
(
self
.
cookedq
)
if
m
:
e
=
m
.
end
()
text
=
self
.
cookedq
[:
e
]
self
.
cookedq
=
self
.
cookedq
[
e
:]
return
(
i
,
m
,
text
)
if
self
.
eof
:
break
if
timeout
is
not
None
:
r
,
w
,
x
=
select
.
select
([
self
.
fileno
()],
[],
[],
timeout
)
if
not
r
:
break
self
.
fill_rawq
()
text
=
self
.
read_very_lazy
()
if
not
text
and
self
.
eof
:
raise
EOFError
return
(
-
1
,
None
,
text
)
def
test
():
def
test
():
...
@@ -398,7 +449,6 @@ def test():
...
@@ -398,7 +449,6 @@ def test():
Default host is localhost; default port is 23.
Default host is localhost; default port is 23.
"""
"""
import
sys
debuglevel
=
0
debuglevel
=
0
while
sys
.
argv
[
1
:]
and
sys
.
argv
[
1
]
==
'-d'
:
while
sys
.
argv
[
1
:]
and
sys
.
argv
[
1
]
==
'-d'
:
debuglevel
=
debuglevel
+
1
debuglevel
=
debuglevel
+
1
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment