t logic we have
been discussing, or it would stop evaluating after the print statement
return. Why is that?
Because the list/tuple is constructed entirely before all() is called. All()
operates only on the final values.
Cheers,
Cameron Simpson
Yesterday, I was running a CNC plasma cutter that's
ls its "mcli" script like this:
'entry_points': {
'console_scripts': [
'mcli = cs.app.megacli:main',
],
Note the ":" before main, not ".".
Cheers,
Cameron Simpson
I think... Therefore I ride. I ride... Ther
as you like.
After you've made a virtualenv, running the "pip" it supplies will install into
the virtualenv. Much safer, and you can do it all as yourself.
Cheers,
Cameron Simpson
I made this letter longer than usual because I lack the time to make it
shorter.-
that. Of course,
when you print "d['a']" it must evaluate that then, and finds 'new value'.
This is one reason why the common idion for default values looks like this:
def func(s=None):
if s is None:
s = ... compute default here ...
Of course, the default
derr=subprocess.PIPE)
proc = subprocess.Popen(cmd_args,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
s,err=proc.communicate()
s=s.strip()
err=err.strip()
if(err==0):
try_=''
It is preferable to say:
try_ = False
Also, you should be lookin
and
understanding it when looking at this kind of problem.
Cheers,
Cameron Simpson
On 31Mar2017 09:43, Cameron Simpson wrote:
On 30Mar2017 13:51, bruce wrote:
Trying to understand the "correct" way to run a sys command ("curl")
and to get the potential stderr. Checki
On 31Mar2017 06:13, eryk sun wrote:
On Thu, Mar 30, 2017 at 10:51 PM, Cameron Simpson wrote:
This suggests that .communicate uses Threads to send and to gather data
independently, and that therefore the deadlock situation may not arise.
For Unix, communicate() uses select or poll. It uses
elpful print() calls scattered throughout should show you what is going on,
too.
Note that it would also be prudent to prevent more than one start thread
running, and so forth.
Cheers,
Cameron Simpson
___
Tutor maillist - Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor
nto the "don't use regexps for this" domain.
Cheers,
Cameron Simpson
___
Tutor maillist - Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor
formats rather than having to laboriously reproduce special stuff.
Definitely a niche, and probably not the core motivation here. But handy.
Cheers,
Cameron Simpson
___
Tutor maillist - Tutor@python.org
To unsubscribe or change subscri
prose, not in filenames.
Cheers,
Cameron Simpson
___
Tutor maillist - Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor
ot;, "X", "X"] or board[6:9]==["X", "X",
"X"] or \
[board[0],board[3],board[6]]==["X", "X", "X"] or [board[1],board[4],board[7]]==["X", "X", "X"] or
[board[2],board[5],board[8]] ==["
...@example.com
Or, if you're using Vixie cron (very very common), set MAILTO in your crontab
and let cron do the work:
MAILTO=y...@example.com
... your-program.py
Obviously "..." is your cron schedule values.
Cheers,
Cameron Simpson
__
t you started on one approach. Pausing can be done in a few ways, either by
starting and stopping individual threads, one after another, or by starting one
thread and using a mutex of some kind to cause it to suspend activity when
needed. Yet anothe
ooks like a tool for data driven computation using a graph of data pipelines.
By restricting it to a DAG on can be certain the computation will finish and
the termination condition is trivially satisfied. No feedback loops.
Cheers,
Cameron Simpson
___
'):
BTW, in Python we tend to use named like "Fred" for classes (or factories), and
"fred" for regular variables. And "FRED" for things that would be constants in
other languages. Eg:
MAX_THINGS = 16
class Foo:
def FooBah(x):
return Foo(x,
On 30May2017 12:06, Peter Otten <__pete...@web.de> wrote:
Cameron Simpson wrote:
As written it should be a bit slower: to construct a set each member get
tested for presence. The cost is in making the set, not in searching it.
No, CPython is a bit smarter than that:
dis.dis('
the underlying I/O buffer size, but it does let you
gather only the lines you want: you can count line lengths or numbers or
whatever criteria you find useful if you want to stop be fore the end of the
file.
Cheers,
Cameron Simpson
___
Tutor maillis
n be turned off; mine doesn't do this. I also turned off the
auto-comment-continuation.
Anyway, somewhat off topic.
-- Cameron Simpson
___
Tutor maillist - Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor
ke the
print(dev_1.dev_repr())?
Assuming that when you say "the Employee subclass" above you mean "Developer",
just like any other method you would override in a subclass. When you define
Developer, define a __str__ method:
class Developer(Employee):
...
def __str__(s
ure.py
and have secure.py just read from standard input. This is that advantage that
(a) the only root thing is the tail command, which just reads and (b) your
program can produce alerts in real time as they come in from the tail, without
having to write painful "tail"-like logic within the
shell before proceeding.
Personally my practice is to mostly use pip only with virtualenvs, as myself.
Using pip as root tends to conflict with Python packages supplied by the OS
vendor/supplier; better to stay out of the way of that and work as oneself on
data the OS vendor doesn't want to
Try modifying each method
to print(repr(self)) as the first thing; you should see that for a normal
method and a property "self" is the instance, for the classmethod it is the
class, and that it isn't supplied at all for a staticmethod.
Cheers,
Cameron Simpson
__
lve them. The OP will need to use Python 2 because the module
seems to rely on a relative import (for its "util.py" file).
Cheers,
Cameron Simpson
___
Tutor maillist - Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor
amed, runs that script against whatever files are
currently modified in my working code repo. So one can just say "lint" at the
shell prompt to get a report on one's work in progress.
Script appended below.
Cheers,
Cameron Simpson
#!/bin/sh
#
# Lint the named files.
# - Cameron
g you want the module to be at
'../illustris_python/illustris_python'.
See if using '/Users/Jim/Documents' finds the module. Then move it to a better
(more targeted) directory and use that directory's name :-)
Cheers,
Cameron Simpson
__
have finished. By marking a Thread as a daemon you're saying that its activity
is not important after program exit. This is probably not the case for your
tutorial task.
Like others, I recommend learning Python 3. It is broadly the same language bu
es in the directory. For each name, record the file's size and
modification time. Wait for that to be unchanged "long enough"; you might then
decide it is ready to move.
Cheers,
Cameron Simpson (formerly c...@zip.com.au)
___
Tuto
console_scripts?
I have a bunch of "one liner" scripts in my personal "bin" directory like this
one:
#!/bin/sh
#
# Run the named port forwards indefinitely.
# - Cameron Simpson 08jul2008
#
# Convert to Python module cs.app.portfwd. - camer
gful.
Your code above _should_ have an int in the value of "guess". However, I
suspect your code actually may look like this:
number=random.randint(1,20)
guess=input()
guess_value=int(guess)
if guessi.e. I'm suggesting that you haven't put the int into "
ue))
print("type(number) =", type(number))
above that line and run it again? Because I just ran your code here and it
worked for me.
Hope this can help you and mostly me
I don't wanna give up but help is scarce from my location
That's fine. The list is for
original snippets included
a:
guess = int(guess)
between those 2 lines.
Anyway, we have his current code, which i can't made produce the error.
Cheers,
Cameron Simpson (formerly c...@zip.com.au)
___
Tutor maillist - Tutor@python.
usually always hold the same type of
value; this storing of different types of values in the same variable
contributed to your problem.
Cheers,
Cameron Simpson (formerly c...@zip.com.au)
___
Tutor maillist - Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor
irst)
or little-endian (least significant byte first).
The machine I'm on here is writing big endian UTF-16 and UTF-32.
As you note, the 16 and 32 forms are (6 + 1) times 2 or 4 respectively. This is
because each encoding has a leading byte order marker to i
can call them on
instances, and the caller doesn't need to know what style of method they are.
The caller just goes:
K.m(blah)
and doesn't care.
Cheers,
Cameron Simpson (formerly c...@zip.com.au)
___
Tutor maillist - Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor
return klass(p.x, p.y, p.z)
because it lets you subclass Foo:
class Bah(Foo):
and call Bah.from_point(p) for free, and it will make a Bah instead of a Foo
because it gets the class as "klass".
Cheers,
Cameron Simpson (formerly c...@zip.com.au)
___
On 08Aug2017 22:30, boB Stepp wrote:
On Mon, Aug 7, 2017 at 10:20 PM, Cameron Simpson wrote:
On 07Aug2017 21:44, boB Stepp wrote:
py3: s = 'Hello!'
py3: len(s.encode("UTF-8"))
6
py3: len(s.encode("UTF-16"))
14
py3: len(s.encode("UTF-32"))
28
How
c reasons. I believe Eryk
Sun is the go to guy for precise technical descriptions of the Windows
situation. I'm not a Windows guy, but I gather modern Windows generally gives
you a pretty clean UTF-8 environment in most situations.
Cheers,
Cameron Simpson (formerly c...@zip.com.au)
ou in
figuring out what is working and what is not.
Cheers,
Cameron Simpson (formerly c...@zip.com.au)
___
Tutor maillist - Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor
On 16Aug2017 10:22, Alan Gauld wrote:
On 16/08/17 02:02, Cameron Simpson wrote:
Ok. So you have a graph like this:
1 -- 2 -- 3 -- 4
|
7 -- 5 -- 6 -- 8
graph = {
1: [2],
2: [1, 3],
2: [1, 3, 5],
3: [2, 4],
4: [3],
5: [7, 6],
5: [2, 6, 7
the log file, overwriting whatever was there. Which might be your problem.
Others have made other remarks.
I'm not sure any of your problems have to do with the subprocess module itself.
Cheers,
Cameron Simpson (formerly c...@zip.com.au)
___
Tut
nctions or methods of your own whose
interfaces are your own operation, and which call the library to accomplish the
task, providing some separation between a natural expression of your upper
level problem and what you might write if you were building from the bottom and
thinking in the librar
uot; shell function which prehacks $PYTHONPATH to have my local lib directory
at the start of $PYTHONPATH. Again, the module itself can then trust that
things are as they should be. Which is as it should be.
Cheers,
Cameron Simpson (formerly c...@zip.com.au)
On 27Aug2017 14:27, boB Stepp wrote:
On Sun, Aug 27, 2017 at 2:13 AM, Cameron Simpson wrote:
On 26Aug2017 21:27, boB Stepp wrote:
import sys
sys.path.append('..')
[...]
The trouble with this specific approach is that '..' relies on your
_working_ directory being above
On 28Aug2017 20:39, boB Stepp wrote:
On Sun, Aug 27, 2017 at 6:03 PM, Cameron Simpson wrote:
from os.path import dirname
It did not occur to me to import something from os.path to use sys.path!
It is pretty normal to import specific names from modules rather than
laboriously writing
until the problem
became glaringly obvious.
BTW, it isn't good to write tests like:
if theo == True:
"theo" a Boolean anyway. Just say:
if theo:
It reads more naturally as well.
Cheers,
Cameron Simpson (formerly c...@zip.com.au)
ularly for little state machines like yours I often find such descriptions
useful. They help get the logic clear in my own mind _before_ writing the
loop, and help you and others understand the code later when you come back to
debug.
It can also help to comment the individual if-statements. Eg
1 == 9 and t.col2 == 10)
where "t" is a "table" object it has handed you. I believe these are just
special objects with attributes for columns and the right __eq__ etc dunder
methods to compute the correct SQL syntax. No escaping or param substitution in
eally need; that can have flow
on effects as surrounding code might start to take advantage of the extra
information more than required. Such code is harder to modify later because
more semantics need to be preserved.
Cheers,
Cameron Simpson (formerly c...@zip.com.au)
_
ocumentation is silent on this, maybe use 'ascii'
instead just on principle - better to notice in your program and decide what to
do there than to feed garbage to your device and have is misbehave.
Cheers,
Cameron Simpson (formerly c...@zip.com.au)
___
Tutor maillist - Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor
On 25Sep2017 09:29, Phil wrote:
On 25/09/17 07:26, Cameron Simpson wrote:
I don't understand why this works from the pyqt IDE but not when run from
the console. I suppose the IDE is adding the correct encoding.
I'm guessing the IDE is python 2 and not doing any encoding at all.
I
ing in the buffer, unsent.
Cheers,
Cameron Simpson (formerly c...@zip.com.au)
___
Tutor maillist - Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor
arge.
So one might process file file as lines of text:
C = Counter()
for line in textfile:
words = line.lower().split()
C.update(words)
This avoids the need for more than a single line to be stored in memory at any
given time.
Cheers,
Cameron Simpson (formerly c...@zip.com.au)
our own policy instead of trying to do
some kind of feature survey of stuff out there.
Cheers,
Cameron Simpson (formerly c...@zip.com.au)
___
Tutor maillist - Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor
In this way the whole tree is traversed.
Cheers,
Cameron Simpson (formerly c...@zip.com.au)
___
Tutor maillist - Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor
On 29Oct2017 10:13, Cameron Simpson wrote:
On 28Oct2017 21:43, Mark Anderson wrote:
Hello, I am currently doing an online course to learn Python. Generally ive
followed it well and am enjoying my first go at programming. However the
description of how to get modules from PyPi has left me
command prompt showing the prompt, your command and the complete error message.
Cheers,
Cameron Simpson (formerly c...@zip.com.au)
___
Tutor maillist - Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman
. Tradition ftp programs used to be able to use .netrc
files, and this module reads them. It means storing credentials in the clear
(obvious make the .netrc file 0600 permissions), but in most batch situations
you're stuck with that anyway.
Cheers,
Cameron Si
swith('diff --git '):
break
interesting.append(line)
Now the "interesting" list has the lines you want.
There's any number of variations on that you might use, but that should get you
going.
Cheers,
Cameron Simpson
__
On 11Jan2018 12:16, YU Bo wrote:
Hi,
Hi,
On Thu, Jan 11, 2018 at 11:40:35AM +1100, Cameron Simpson wrote:
Do you have the text as above - a single string - or coming from a
file? I'll presume a single string.
En.., the text is multi-string from str(something) within python.
Tha
method will usually return None.
These modification methods _could_ return a value, but the general practice is
not to.
Cheers,
Cameron Simpson (formerly c...@zip.com.au)
___
Tutor maillist - Tutor@python.org
To unsubscribe or change subscription
ather you use, is, I thought, just an editor. You also
need somewhere to run Python from. Those of use not using IDEs generally run
the programmes from a terminal. Personally I use iterm3 for my terminals, lots
of nice features.
Cheers,
Cameron Simpson (formerly c...@zip.com.au)
_
e that you get
an int back, which is easy to test for your other constraints (less than 1,
greater than 0). Now, because int(0 raises an exception for bad input you need
to phrase the test differently:
try:
value = int(digits)
except ValueError:
# invalid input, do something here
sername")
password = input("Please enter your password")
Again, these lines should call raw_input(), not input().
def thank_you():
print("Thank you for signing up at our website!.")
You define this function but never call it.
elif choice == "q":
e are other tools for the same purpose).
In fact, tell us regardless. It aids debugging.
Cheers,
Cameron Simpson (formerly c...@zip.com.au)
___
Tutor maillist - Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor
? Then the
tag might help you. Some other document format such as roff or LaTeX? A
terminal? If this is possible it will be entirely terminal dependent. A GUI of
some kind, such as Tk or Qt? You will need to consult its documentation for
its text widgets.
Cheers,
Cameron Simpson (
ter). For example:
with open(filename) as f:
for lineno, line in enumerate(f, 1):
if badness:
print("%s:%d: badness happened" % (filename, lineno), file=sys.stderr)
continue
... process good lines ...
Cheers,
Cameron Simpson
__
ameters. When you pass values to Python functions, you are passing
a reference, not a new copy. If a function modifies that reference's _content_,
as you do when you go "words.move(z)", you're modifying the original.
Try running this code:
my_words = ['bbb'
't have any way to extract semantics like
titles from a document.
The OP presumably has the specific output of a particular tool with this nice
well structured postscript, so he needs to write his/her own special parser.
Cheers,
Cameron Simpson
quot;export" from your
WIndows git (or some mirror elsewhere).
So: do you have rsync? Do you have ssh from your PC to the Solaris box?
Cheers,
Cameron Simpson
___
Tutor maillist - Tutor@python.org
To unsubscribe or change subscription options:
f he can mount a Solaris drive (NFS or SMB) he can just copy the files :-)
Cheers,
Cameron Simpson
___
Tutor maillist - Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor
it take to connect manually using ssh?
He's not using ssh - it is all local.
Cheers,
Cameron Simpson
___
Tutor maillist - Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor
quot;su" and see if it matches your pattern.
And so on.
Cheers,
Cameron Simpson
___
Tutor maillist - Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor
On 02Sep2018 14:29, Steven D'Aprano wrote:
On Sun, Sep 02, 2018 at 10:01:02AM +1000, Cameron Simpson wrote:
On 02Sep2018 00:31, Steven D'Aprano wrote:
>On Sat, Sep 01, 2018 at 11:41:42AM +, krishna chaitanya via Tutor
>wrote:
>>Below is my code, i am frequently hi
forum seems the nicest and most helpful I've encountered.
The output of a CGI script should be a valid HTTP response: you need some HTTP
headers describing the output format and _then_ the core programme output. The
minimal header is a Content-Type: header to denote the program result for
weather = ForecastIO.ForecastIO( api_key, latitude=coords[0],
longitude=coords[1] )
daily = FIODaily.FIODaily(weather)
for day in range(2,7):
day_data = daily.get_day(day)
csvw.writerow([city, day_data['temperatureMax'],
day_data['temperatureMin
I'm obviously missing something fundamental here. Problem is I can't
seem to find any examples of people asking this question before on the
inter-webs..
You have the opposite of my problem. I can often find people asking the same
question, but less often an answer. Or a decent answ
y Python 3 deals with
chunks of bytes. A "bytes" is readonly and a bytearray may have its contents
modified. From a C background, they're like an array of unsigned chars.
I'm going to try the experiment you mentioned in hopes of it giving me
a be
On 08Sep2018 20:01, Cameron Simpson wrote:
So, if I'm understanding the transfer() function correctly, the
function takes and returns a bytearray type.
It would be good to see the specification for the transfer function.
They we can adhere to its requirements. Can you supply a URL?
7;foobah')
And he's working with bytearrays because the target library is Python 2, where
there's no bytes type.
Cheers,
Cameron Simpson
___
Tutor maillist - Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor
ay( (1,2,3,65,66) )
print(repr(bs))
print(hexlify(bs))
[...]
faffing is a new term, but given the context I'm guessing it is
equivalent to 'mucking about' or more colorful wording which I won't
even attempt to publish here.
You are correct:
https://en.wikipedia.org/wi
On 09Sep2018 23:00, Chip Wachob wrote:
On Sat, Sep 8, 2018 at 9:14 PM, Cameron Simpson wrote:
Actually he's getting back bytearray instances from transfer and wants to
join them up (his function does a few small transfers to work around an
issue with one big transfer). His earlier co
rns
all_together returns
So both are type 'list' which is referred to here :
https://infohost.nmt.edu/tcc/help/pubs/python/web/sequence-types.html
as a valid sequence type but apparently there's a detail I'm still missing...
Yeah. byt
ing of your target text
=> decode to a Python str
Cheers,
Cameron Simpson
___
Tutor maillist - Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor
vert back into bytes.
The easy way is to just accrue the bytes into a value as you read them:
n = 0
for b in the_bytes:
n = n<<8 + b
if you're reading "big endian" data (high ordinal bytes come first).
So read them in, accruing the value into "n".
eneficial to inspect.
It at least gets you objective information about where your programme
spends its time. It is limited by the data you give your programme: toy
example input data are not as good as real world data.
Finally, some things are as efficient as they get. You _can't_ always
n all operating systems?
The doco reads that way to me.
However, NamedTemporaryFile is a (nice) wrapper for tempfile.mkstemp().
Why not use that directly?
Cheers,
Cameron Simpson
___
Tutor maillist - Tutor@python.org
To unsubscribe or change subsc
classes instead!) explicitly mentions using delete=False.
Cheers,
Cameron Simpson
___
Tutor maillist - Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor
ts of the
config file". Which lets the user keep a tiny config file modifying only
the stuff which needs tweaking.
Utilities:
I my opinion, unless they shift with you app it is the end user's job to
have these in the execution path ($PATH on UNIX). If you app/packag
On 23Oct2018 11:24, Peter Otten <__pete...@web.de> wrote:
Cameron Simpson wrote:
The doco for mktemp (do not use! use mkstemp or the
NamedTemporaryFile
classes instead!) explicitly mentions using delete=False.
Well, "permanent temporary file" does sound odd.
By the way, Na
u can find that with os.path.getctime() (or several
>other options, eg os.stat)
Do not use ctime, it is _not_ "creation" time. It is "last change to
inode" time. It _starts_ as creation time, but a chmod or even a
link/unlink can change it: anything that changes the metad
quot;, count, "target_int =", target_int)
... read the int ...
if isint == True:
print("isint is true!")
ints.append(new_int)
count += 1
print("count =>", count)
You should see that the expected code is actually reached and run
On 06Nov2018 15:50, Joseph Gulizia ", count)
You should see that the expected code is actually reached and run, and
if it isn't, the corresponding print()s do not happen.
Cheers,
Cameron Simpson
___
Tutor maillist - Tutor@python.org
To u
viously contrived, and the sleeps are so you can see
it all happen. But you can slot this into simple terminal based
programmes to present dynamic progress.
Cheers,
Cameron Simpson
___
Tutor maillist - Tutor@python.org
To unsubscribe or change su
see something
weird.
And I have no idea what happens on Windows.
I'd sort of expect Windows terminals, even cmd.exe, to accept the ANSI
sequences, which is what vt100 and xterms use. But that is expectation,
not knowledge.
Cheers,
Cameron Simpson
_
ing1[j-1])
a = mo.group()
print a
print os.getcwd()
break
Please advice how to proceed.
mo.group() returns the whole match. The above seems to look for the
string 'ERR2' in a line, and look for a patch number in the previous
line. I
above. It is
useful so that people know what various discussions are about.
Cheers,
Cameron Simpson
___
Tutor maillist - Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor
r thread in threadPool:
sem.acquire()
thread.start()
# wait for collection to complete
collector.join()
def collect(q, ids):
for count in range(len(ids)):
id = q.get()
sem.release()
so that you acquire the semaphore before starting each thread, and
release the semaphore as thr
code using your example and give it another try, I will make sure to let
you know if I run into any issues or additional questions. :)
Questions are welcome.
Cheers,
Cameron Simpson
___
Tutor maillist - Tutor@python.org
To unsubscribe or change subscri
..
print(s, file=sys.stderr)
raise
i.e. report some special message, then _reraise_ the original exception.
In this way he gets to keep the original exception and traceback for
debugging, which still making whatever special message he wanted to
make.
Cheers,
Cameron Simpson
___
Tutor maillist - Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor
201 - 300 of 360 matches
Mail list logo