mirror of
https://github.com/python/cpython.git
synced 2025-09-27 02:39:58 +00:00
Issue #8890: Stop advertising an insecure use of /tmp in docs
This commit is contained in:
parent
9e14755b46
commit
0b785036ef
17 changed files with 37 additions and 32 deletions
|
@ -189,7 +189,7 @@ under the distribution root; if you're excessively concerned with speed, or want
|
||||||
to keep the source tree pristine, you can change the build directory with the
|
to keep the source tree pristine, you can change the build directory with the
|
||||||
:option:`--build-base` option. For example::
|
:option:`--build-base` option. For example::
|
||||||
|
|
||||||
python setup.py build --build-base=/tmp/pybuild/foo-1.0
|
python setup.py build --build-base=/path/to/pybuild/foo-1.0
|
||||||
|
|
||||||
(Or you could do this permanently with a directive in your system or personal
|
(Or you could do this permanently with a directive in your system or personal
|
||||||
Distutils configuration file; see section :ref:`inst-config-files`.) Normally, this
|
Distutils configuration file; see section :ref:`inst-config-files`.) Normally, this
|
||||||
|
|
|
@ -76,7 +76,7 @@ automatically when the program terminates without relying on the application
|
||||||
making an explicit call into this module at termination. ::
|
making an explicit call into this module at termination. ::
|
||||||
|
|
||||||
try:
|
try:
|
||||||
_count = int(open("/tmp/counter").read())
|
_count = int(open("counter").read())
|
||||||
except IOError:
|
except IOError:
|
||||||
_count = 0
|
_count = 0
|
||||||
|
|
||||||
|
@ -85,7 +85,7 @@ making an explicit call into this module at termination. ::
|
||||||
_count = _count + n
|
_count = _count + n
|
||||||
|
|
||||||
def savecounter():
|
def savecounter():
|
||||||
open("/tmp/counter", "w").write("%d" % _count)
|
open("counter", "w").write("%d" % _count)
|
||||||
|
|
||||||
import atexit
|
import atexit
|
||||||
atexit.register(savecounter)
|
atexit.register(savecounter)
|
||||||
|
|
|
@ -170,7 +170,7 @@ dictionaries. In addition, they support the methods listed below.
|
||||||
Example::
|
Example::
|
||||||
|
|
||||||
>>> import bsddb
|
>>> import bsddb
|
||||||
>>> db = bsddb.btopen('/tmp/spam.db', 'c')
|
>>> db = bsddb.btopen('spam.db', 'c')
|
||||||
>>> for i in range(10): db['%d'%i] = '%d'% (i*i)
|
>>> for i in range(10): db['%d'%i] = '%d'% (i*i)
|
||||||
...
|
...
|
||||||
>>> db['3']
|
>>> db['3']
|
||||||
|
|
|
@ -81,7 +81,7 @@ program to users of your script, you can have the reports saved to files
|
||||||
instead, with code like this::
|
instead, with code like this::
|
||||||
|
|
||||||
import cgitb
|
import cgitb
|
||||||
cgitb.enable(display=0, logdir="/tmp")
|
cgitb.enable(display=0, logdir="/path/to/logdir")
|
||||||
|
|
||||||
It's very helpful to use this feature during script development. The reports
|
It's very helpful to use this feature during script development. The reports
|
||||||
produced by :mod:`cgitb` provide information that can save you a lot of time in
|
produced by :mod:`cgitb` provide information that can save you a lot of time in
|
||||||
|
|
|
@ -540,7 +540,7 @@ examples demonstrate how to use the :func:`parse` function, what the repr of an
|
||||||
AST looks like, and how to access attributes of an AST node.
|
AST looks like, and how to access attributes of an AST node.
|
||||||
|
|
||||||
The first module defines a single function. Assume it is stored in
|
The first module defines a single function. Assume it is stored in
|
||||||
:file:`/tmp/doublelib.py`. ::
|
:file:`doublelib.py`. ::
|
||||||
|
|
||||||
"""This is an example module.
|
"""This is an example module.
|
||||||
|
|
||||||
|
@ -557,7 +557,7 @@ to create an instance from a repr, you must import the class names from the
|
||||||
:mod:`compiler.ast` module. ::
|
:mod:`compiler.ast` module. ::
|
||||||
|
|
||||||
>>> import compiler
|
>>> import compiler
|
||||||
>>> mod = compiler.parseFile("/tmp/doublelib.py")
|
>>> mod = compiler.parseFile("doublelib.py")
|
||||||
>>> mod
|
>>> mod
|
||||||
Module('This is an example module.\n\nThis is the docstring.\n',
|
Module('This is an example module.\n\nThis is the docstring.\n',
|
||||||
Stmt([Function(None, 'double', ['x'], [], 0,
|
Stmt([Function(None, 'double', ['x'], [], 0,
|
||||||
|
|
|
@ -93,7 +93,7 @@ Examples of usage
|
||||||
Example of how to read a compressed file::
|
Example of how to read a compressed file::
|
||||||
|
|
||||||
import gzip
|
import gzip
|
||||||
f = gzip.open('/home/joe/file.txt.gz', 'rb')
|
f = gzip.open('file.txt.gz', 'rb')
|
||||||
file_content = f.read()
|
file_content = f.read()
|
||||||
f.close()
|
f.close()
|
||||||
|
|
||||||
|
@ -101,15 +101,15 @@ Example of how to create a compressed GZIP file::
|
||||||
|
|
||||||
import gzip
|
import gzip
|
||||||
content = "Lots of content here"
|
content = "Lots of content here"
|
||||||
f = gzip.open('/home/joe/file.txt.gz', 'wb')
|
f = gzip.open('file.txt.gz', 'wb')
|
||||||
f.write(content)
|
f.write(content)
|
||||||
f.close()
|
f.close()
|
||||||
|
|
||||||
Example of how to GZIP compress an existing file::
|
Example of how to GZIP compress an existing file::
|
||||||
|
|
||||||
import gzip
|
import gzip
|
||||||
f_in = open('/home/joe/file.txt', 'rb')
|
f_in = open('file.txt', 'rb')
|
||||||
f_out = gzip.open('/home/joe/file.txt.gz', 'wb')
|
f_out = gzip.open('file.txt.gz', 'wb')
|
||||||
f_out.writelines(f_in)
|
f_out.writelines(f_in)
|
||||||
f_out.close()
|
f_out.close()
|
||||||
f_in.close()
|
f_in.close()
|
||||||
|
|
|
@ -68,6 +68,6 @@ to this variable:
|
||||||
Example::
|
Example::
|
||||||
|
|
||||||
>>> import imghdr
|
>>> import imghdr
|
||||||
>>> imghdr.what('/tmp/bass.gif')
|
>>> imghdr.what('bass.gif')
|
||||||
'gif'
|
'gif'
|
||||||
|
|
||||||
|
|
|
@ -71,6 +71,6 @@ An example usage::
|
||||||
|
|
||||||
>>> import mailcap
|
>>> import mailcap
|
||||||
>>> d=mailcap.getcaps()
|
>>> d=mailcap.getcaps()
|
||||||
>>> mailcap.findmatch(d, 'video/mpeg', filename='/tmp/tmp1223')
|
>>> mailcap.findmatch(d, 'video/mpeg', filename='tmp1223')
|
||||||
('xmpeg /tmp/tmp1223', {'view': 'xmpeg %s'})
|
('xmpeg tmp1223', {'view': 'xmpeg %s'})
|
||||||
|
|
||||||
|
|
|
@ -46,7 +46,7 @@ To post an article from a file (this assumes that the article has valid
|
||||||
headers, and that you have right to post on the particular newsgroup)::
|
headers, and that you have right to post on the particular newsgroup)::
|
||||||
|
|
||||||
>>> s = NNTP('news.gmane.org')
|
>>> s = NNTP('news.gmane.org')
|
||||||
>>> f = open('/tmp/article')
|
>>> f = open('articlefile')
|
||||||
>>> s.post(f)
|
>>> s.post(f)
|
||||||
'240 Article posted successfully.'
|
'240 Article posted successfully.'
|
||||||
>>> s.quit()
|
>>> s.quit()
|
||||||
|
|
|
@ -173,10 +173,10 @@ required option
|
||||||
|
|
||||||
For example, consider this hypothetical command-line::
|
For example, consider this hypothetical command-line::
|
||||||
|
|
||||||
prog -v --report /tmp/report.txt foo bar
|
prog -v --report report.txt foo bar
|
||||||
|
|
||||||
``-v`` and ``--report`` are both options. Assuming that ``--report``
|
``-v`` and ``--report`` are both options. Assuming that ``--report``
|
||||||
takes one argument, ``/tmp/report.txt`` is an option argument. ``foo`` and
|
takes one argument, ``report.txt`` is an option argument. ``foo`` and
|
||||||
``bar`` are positional arguments.
|
``bar`` are positional arguments.
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -26,10 +26,10 @@ Example::
|
||||||
>>> import pipes
|
>>> import pipes
|
||||||
>>> t = pipes.Template()
|
>>> t = pipes.Template()
|
||||||
>>> t.append('tr a-z A-Z', '--')
|
>>> t.append('tr a-z A-Z', '--')
|
||||||
>>> f=t.open('/tmp/1', 'w')
|
>>> f = t.open('pipefile', 'w')
|
||||||
>>> f.write('hello world')
|
>>> f.write('hello world')
|
||||||
>>> f.close()
|
>>> f.close()
|
||||||
>>> open('/tmp/1').read()
|
>>> open('pipefile').read()
|
||||||
'HELLO WORLD'
|
'HELLO WORLD'
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -181,7 +181,7 @@ Examples::
|
||||||
|
|
||||||
import posixfile
|
import posixfile
|
||||||
|
|
||||||
file = posixfile.open('/tmp/test', 'w')
|
file = posixfile.open('testfile', 'w')
|
||||||
file.lock('w|')
|
file.lock('w|')
|
||||||
...
|
...
|
||||||
file.lock('u')
|
file.lock('u')
|
||||||
|
|
|
@ -200,7 +200,7 @@ A simple example demonstrating the use of the programmatic interface::
|
||||||
# run the new command using the given tracer
|
# run the new command using the given tracer
|
||||||
tracer.run('main()')
|
tracer.run('main()')
|
||||||
|
|
||||||
# make a report, placing output in /tmp
|
# make a report, placing output in the current directory
|
||||||
r = tracer.results()
|
r = tracer.results()
|
||||||
r.write_results(show_missing=True, coverdir="/tmp")
|
r.write_results(show_missing=True, coverdir=".")
|
||||||
|
|
||||||
|
|
|
@ -19,7 +19,7 @@ Typically, :data:`sys.path` is a list of directory names as strings. This modul
|
||||||
also allows an item of :data:`sys.path` to be a string naming a ZIP file archive.
|
also allows an item of :data:`sys.path` to be a string naming a ZIP file archive.
|
||||||
The ZIP archive can contain a subdirectory structure to support package imports,
|
The ZIP archive can contain a subdirectory structure to support package imports,
|
||||||
and a path within the archive can be specified to only import from a
|
and a path within the archive can be specified to only import from a
|
||||||
subdirectory. For example, the path :file:`/tmp/example.zip/lib/` would only
|
subdirectory. For example, the path :file:`example.zip/lib/` would only
|
||||||
import from the :file:`lib/` subdirectory within the archive.
|
import from the :file:`lib/` subdirectory within the archive.
|
||||||
|
|
||||||
Any files may be present in the ZIP archive, but only files :file:`.py` and
|
Any files may be present in the ZIP archive, but only files :file:`.py` and
|
||||||
|
@ -151,8 +151,8 @@ Examples
|
||||||
Here is an example that imports a module from a ZIP archive - note that the
|
Here is an example that imports a module from a ZIP archive - note that the
|
||||||
:mod:`zipimport` module is not explicitly used. ::
|
:mod:`zipimport` module is not explicitly used. ::
|
||||||
|
|
||||||
$ unzip -l /tmp/example.zip
|
$ unzip -l example.zip
|
||||||
Archive: /tmp/example.zip
|
Archive: example.zip
|
||||||
Length Date Time Name
|
Length Date Time Name
|
||||||
-------- ---- ---- ----
|
-------- ---- ---- ----
|
||||||
8467 11-26-02 22:30 jwzthreading.py
|
8467 11-26-02 22:30 jwzthreading.py
|
||||||
|
@ -161,8 +161,8 @@ Here is an example that imports a module from a ZIP archive - note that the
|
||||||
$ ./python
|
$ ./python
|
||||||
Python 2.3 (#1, Aug 1 2003, 19:54:32)
|
Python 2.3 (#1, Aug 1 2003, 19:54:32)
|
||||||
>>> import sys
|
>>> import sys
|
||||||
>>> sys.path.insert(0, '/tmp/example.zip') # Add .zip file to front of path
|
>>> sys.path.insert(0, 'example.zip') # Add .zip file to front of path
|
||||||
>>> import jwzthreading
|
>>> import jwzthreading
|
||||||
>>> jwzthreading.__file__
|
>>> jwzthreading.__file__
|
||||||
'/tmp/example.zip/jwzthreading.py'
|
'example.zip/jwzthreading.py'
|
||||||
|
|
||||||
|
|
|
@ -236,9 +236,9 @@ arguments: ``open(filename, mode)``.
|
||||||
|
|
||||||
::
|
::
|
||||||
|
|
||||||
>>> f = open('/tmp/workfile', 'w')
|
>>> f = open('workfile', 'w')
|
||||||
>>> print f
|
>>> print f
|
||||||
<open file '/tmp/workfile', mode 'w' at 80a0960>
|
<open file 'workfile', mode 'w' at 80a0960>
|
||||||
|
|
||||||
The first argument is a string containing the filename. The second argument is
|
The first argument is a string containing the filename. The second argument is
|
||||||
another string containing a few characters describing the way in which the file
|
another string containing a few characters describing the way in which the file
|
||||||
|
@ -339,7 +339,7 @@ of the file, 1 uses the current file position, and 2 uses the end of the file as
|
||||||
the reference point. *from_what* can be omitted and defaults to 0, using the
|
the reference point. *from_what* can be omitted and defaults to 0, using the
|
||||||
beginning of the file as the reference point. ::
|
beginning of the file as the reference point. ::
|
||||||
|
|
||||||
>>> f = open('/tmp/workfile', 'r+')
|
>>> f = open('workfile', 'r+')
|
||||||
>>> f.write('0123456789abcdef')
|
>>> f.write('0123456789abcdef')
|
||||||
>>> f.seek(5) # Go to the 6th byte in the file
|
>>> f.seek(5) # Go to the 6th byte in the file
|
||||||
>>> f.read(1)
|
>>> f.read(1)
|
||||||
|
@ -363,7 +363,7 @@ objects. This has the advantage that the file is properly closed after its
|
||||||
suite finishes, even if an exception is raised on the way. It is also much
|
suite finishes, even if an exception is raised on the way. It is also much
|
||||||
shorter than writing equivalent :keyword:`try`\ -\ :keyword:`finally` blocks::
|
shorter than writing equivalent :keyword:`try`\ -\ :keyword:`finally` blocks::
|
||||||
|
|
||||||
>>> with open('/tmp/workfile', 'r') as f:
|
>>> with open('workfile', 'r') as f:
|
||||||
... read_data = f.read()
|
... read_data = f.read()
|
||||||
>>> f.closed
|
>>> f.closed
|
||||||
True
|
True
|
||||||
|
|
|
@ -1081,6 +1081,7 @@ Sue Williams
|
||||||
Gerald S. Williams
|
Gerald S. Williams
|
||||||
Steven Willis
|
Steven Willis
|
||||||
Frank Willison
|
Frank Willison
|
||||||
|
Geoff Wilson
|
||||||
Greg V. Wilson
|
Greg V. Wilson
|
||||||
J Derek Wilson
|
J Derek Wilson
|
||||||
Paul Winkler
|
Paul Winkler
|
||||||
|
|
|
@ -926,6 +926,10 @@ Tools/Demos
|
||||||
Documentation
|
Documentation
|
||||||
-------------
|
-------------
|
||||||
|
|
||||||
|
- Issue #8890: Stop advertising an insecure practice by replacing uses
|
||||||
|
of the /tmp directory with better alternatives in the documentation.
|
||||||
|
Patch by Geoff Wilson.
|
||||||
|
|
||||||
- Issue #17203: add long option names to unittest discovery docs.
|
- Issue #17203: add long option names to unittest discovery docs.
|
||||||
|
|
||||||
- Issue #13094: add "Why do lambdas defined in a loop with different values
|
- Issue #13094: add "Why do lambdas defined in a loop with different values
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue