Some updates. Still out of date.

This commit is contained in:
Guido van Rossum 1996-06-26 19:50:09 +00:00
parent 3cd7fa40fa
commit ca318ec12e
1 changed files with 157 additions and 29 deletions

186
Misc/FAQ
View File

@ -9,8 +9,8 @@ Approved: news-answers-request@MIT.Edu
Archive-name: python-faq/part1 Archive-name: python-faq/part1
Submitted-by: Guido van Rossum <guido@cwi.nl> Submitted-by: Guido van Rossum <guido@cwi.nl>
Version: 1.29 Version: 1.31
Last-modified: 11 October 1995 Last-modified: 26 June 1996
This article contains answers to Frequently Asked Questions about This article contains answers to Frequently Asked Questions about
Python (an object-oriented interpreted programming language -- see Python (an object-oriented interpreted programming language -- see
@ -29,7 +29,7 @@ Author's address:
Email: <guido@python.org>, <guido@cnri.reston.va.us>, <guido@cwi.nl> Email: <guido@python.org>, <guido@cnri.reston.va.us>, <guido@cwi.nl>
The latest version of this FAQ is available by anonymous ftp from The latest version of this FAQ is available by anonymous ftp from
<URL:ftp://ftp.python.org/pub/doc/FAQ>. It will also be posted <URL:ftp://ftp.python.org/pub/python/doc/FAQ>. It will also be posted
regularly to the newsgroups comp.answers <URL:news:comp.answers> and regularly to the newsgroups comp.answers <URL:news:comp.answers> and
comp.lang.python <URL:news:comp.lang.python>. comp.lang.python <URL:news:comp.lang.python>.
@ -106,16 +106,20 @@ Here's an overview of the questions per chapter:
3.7. Q. I use VPATH but some targets are built in the source directory. 3.7. Q. I use VPATH but some targets are built in the source directory.
3.8. Q. Trouble building or linking with the GNU readline library. 3.8. Q. Trouble building or linking with the GNU readline library.
3.9. Q. Trouble building Python on Linux. 3.9. Q. Trouble building Python on Linux.
3.10. Q. Trouble with prototypes on Ultrix. 3.10. Q. Trouble with socket I/O on Linux.
3.11. Q. Trouble with posix.listdir on NeXTSTEP 3.2. 3.11. Q. Trouble with prototypes on Ultrix.
3.12. Q. Other trouble building Python on platform X. 3.12. Q. Trouble with posix.listdir on NeXTSTEP 3.2.
3.13. Q. How to configure dynamic loading on Lixux. 3.13. Q. Other trouble building Python on platform X.
3.14. Q. Under Solaris 2.x, using GCC, how do I use shared libraries? 3.14. Q. How to configure dynamic loading on Linux.
3.15. Q. Errors when linking with a shared library containing C++ code. 3.15. Q. Under Solaris 2.x, using GCC, how do I use shared libraries?
3.16. Q. Tk menus or radiobuttons don't work properly in Python 1.2. 3.16. Q. Errors when linking with a shared library containing C++ code.
3.17. Q. I built with _tkintermodule.c enabled but get "Tkinter not found". 3.17. Q. Tk menus or radiobuttons don't work properly in Python 1.2.
3.18. Q. I built with Tk 4.0 but Tkinter complains about the Tk version. 3.18. Q. I built with tkintermodule.c enabled but get "Tkinter not found".
3.19. Q. Tk doesn't work right on DEC Alpha. 3.19. Q. I built with Tk 4.0 but Tkinter complains about the Tk version.
3.20. Q. Tk doesn't work right on DEC Alpha.
3.21. Q. Several common system calls are missing from the posix module.
3.22. Q. ImportError: No module named string, on MS Windows.
3.23. Q. Core dump on SGI when using the gl module.
4. Programming in Python 4. Programming in Python
4.1. Q. Is there a source code level debugger with breakpoints, step, 4.1. Q. Is there a source code level debugger with breakpoints, step,
@ -169,6 +173,8 @@ Here's an overview of the questions per chapter:
4.31. Q. How do I call a function if I have the arguments in a tuple? 4.31. Q. How do I call a function if I have the arguments in a tuple?
4.32. Q. How do I enable font-lock-mode for Python in Emacs? 4.32. Q. How do I enable font-lock-mode for Python in Emacs?
4.33. Q. Is there an inverse to the format operator (a la C's scanf())? 4.33. Q. Is there an inverse to the format operator (a la C's scanf())?
4.34. Q. Can I have Tk events handled while waiting for I/O?
4.35. Q. How do I write a function with output parameters (call by reference)?
5. Extending Python 5. Extending Python
5.1. Q. Can I create my own functions in C? 5.1. Q. Can I create my own functions in C?
@ -788,12 +794,18 @@ from Lib/test/test_b2.py.
Apart from this, Python builds and runs fine on most Linux versions Apart from this, Python builds and runs fine on most Linux versions
(if you run into trouble on an old Linux version, consider upgrading). (if you run into trouble on an old Linux version, consider upgrading).
3.10. Q. Trouble with prototypes on Ultrix. 3.10. Q. Trouble with socket I/O on Linux.
A. Once you've built Python, use it to run the regen.py script in the
Lib/linux1 directory. Apparently the files as distributed don't match
the system headers on some Linux versions.
3.11. Q. Trouble with prototypes on Ultrix.
A. Ultrix cc seems broken -- use gcc, or edit config.h to #undef A. Ultrix cc seems broken -- use gcc, or edit config.h to #undef
HAVE_PROTOTYPES. HAVE_PROTOTYPES.
3.11. Q. Trouble with posix.listdir on NeXTSTEP 3.2. 3.12. Q. Trouble with posix.listdir on NeXTSTEP 3.2.
A. (This often manifests itself as a weird error from the A. (This often manifests itself as a weird error from the
compileall.py script run by "make libinstall".) compileall.py script run by "make libinstall".)
@ -803,7 +815,7 @@ derived from (an old version of) gcc, its interpretation of the
"-posix" switch is different; in this particular case, cc is right and "-posix" switch is different; in this particular case, cc is right and
gcc is wrong. gcc is wrong.
3.12. Q. Other trouble building Python on platform X. 3.13. Q. Other trouble building Python on platform X.
A. Please email the details to <guido@cwi.nl> and I'll look into it. A. Please email the details to <guido@cwi.nl> and I'll look into it.
Please provide as many details as possible. In particular, if you Please provide as many details as possible. In particular, if you
@ -812,7 +824,7 @@ version) you are using it will be difficult for me to figure out what
is the matter. If you get a specific error message, please email it is the matter. If you get a specific error message, please email it
to me too. to me too.
3.13. Q. How to configure dynamic loading on Lixux. 3.14. Q. How to configure dynamic loading on Linux.
A. There are two answers, depending on whether you are using the new A. There are two answers, depending on whether you are using the new
ELF object format or not. ELF object format or not.
@ -860,23 +872,23 @@ of using dynamic libraries on Linux are:
4) Recompile Python. 4) Recompile Python.
3.14. Q. Under Solaris 2.x, using GCC, how do I use shared libraries? 3.15. Q. Under Solaris 2.x, using GCC, how do I use shared libraries?
A. Use the linker in /usr/ucb/ld, not the GNU linker. The latter A. Use the linker in /usr/ucb/ld, not the GNU linker. The latter
cannot create shared libraries. cannot create shared libraries.
3.15. Q. Errors when linking with a shared library containing C++ code. 3.16. Q. Errors when linking with a shared library containing C++ code.
A. Link the main Python binary with C++. Change the definition of A. Link the main Python binary with C++. Change the definition of
LINKCC in Modules/Makefile to be your C++ compiler. You may have to LINKCC in Modules/Makefile to be your C++ compiler. You may have to
edit config.c slightly to make it compilable with C++. edit config.c slightly to make it compilable with C++.
3.16. Q. Tk menus or radiobuttons don't work properly in Python 1.2. 3.17. Q. Tk menus or radiobuttons don't work properly in Python 1.2.
A. There's a bug in Tkinter.py; remove ClassType and InstanceType from A. There's a bug in Tkinter.py; remove ClassType and InstanceType from
the definition of CallableTypes near the top of Lib/tkinter/Tkinter.py. the definition of CallableTypes near the top of Lib/tkinter/Tkinter.py.
3.17. Q. I built with _tkintermodule.c enabled but get "Tkinter not found". 3.18. Q. I built with tkintermodule.c enabled but get "Tkinter not found".
A. Tkinter.py (note: upper case T) lives in a subdirectory of Lib, A. Tkinter.py (note: upper case T) lives in a subdirectory of Lib,
Lib/tkinter. If you are using the default module search path, you Lib/tkinter. If you are using the default module search path, you
@ -884,7 +896,7 @@ probably didn't enable the line in the Modules/Setup file defining
TKPATH; if you use the environment variable PYTHONPATH, you'll have to TKPATH; if you use the environment variable PYTHONPATH, you'll have to
add the proper tkinter subdirectory. add the proper tkinter subdirectory.
3.18. Q. I built with Tk 4.0 but Tkinter complains about the Tk version. 3.19. Q. I built with Tk 4.0 but Tkinter complains about the Tk version.
A. Several things could cause this. You most likely have a Tk 3.6 A. Several things could cause this. You most likely have a Tk 3.6
installation that wasn't completely eradicated by the Tk 4.0 installation that wasn't completely eradicated by the Tk 4.0
@ -895,7 +907,7 @@ have compiled Python with the old tk.h header file (yes, this actually
compiles!); you may actually have linked with Tk 3.6 even though Tk compiles!); you may actually have linked with Tk 3.6 even though Tk
4.0 is also around. Similar for Tcl 7.4 vs. Tcl 7.3. 4.0 is also around. Similar for Tcl 7.4 vs. Tcl 7.3.
3.19. Q. Tk doesn't work right on DEC Alpha. 3.20. Q. Tk doesn't work right on DEC Alpha.
A. You probably compiled either Tcl, Tk or Python with gcc. Don't. A. You probably compiled either Tcl, Tk or Python with gcc. Don't.
For this platform, which has 64-bit integers, gcc is known to generate For this platform, which has 64-bit integers, gcc is known to generate
@ -907,6 +919,33 @@ far as we know, there are no problem with gcc on other platforms --
the instabilities seem to be restricted to the DEC Alpha.) See also the instabilities seem to be restricted to the DEC Alpha.) See also
question 3.6. question 3.6.
3.21. Q. Several common system calls are missing from the posix module.
A. Most likely, *all* test compilations run by the configure script
are failing for some reason or another. Have a look in config.log to
see what could be the reason. A common reason is specifying a
directory to the --with-readline option that doesn't contain the
libreadline.a file.
3.22. Q. ImportError: No module named string, on MS Windows.
A. Most likely, your PYTHONPATH environment variable should be set to
something like:
set PYTHONPATH=c:\python;c:\python\lib;c:\python\scripts
(assuming Python was installed in c:\python)
3.23. Q. Core dump on SGI when using the gl module.
There are conflicts between entry points in the termcap and curses
libraries and an entry point in the GL library. There's a hack of a
fix for the termcap library if it's needed for the GNU readline
library, but it doesn't work when you're using curses. Concluding,
you can't build a Python binary containing both the curses and gl
modules.
4. Programming in Python 4. Programming in Python
======================== ========================
@ -1111,10 +1150,10 @@ the module only works on specific platforms (e.g. gl only works on SGI
machines). machines).
NOTE: if the complaint is about "Tkinter" (upper case T) and you have NOTE: if the complaint is about "Tkinter" (upper case T) and you have
already configured module "_tkinter" (lower case t and underscore), already configured module "tkinter" (lower case t), the solution is
the solution is *not* to rename tkinter to Tkinter or vice versa. *not* to rename tkinter to Tkinter or vice versa. There is probably
There is probably something wrong with your module search path. Check something wrong with your module search path. Check out the value of
out the value of sys.path. sys.path.
For X-related modules (Xt and Xm) you will have to do more work: they For X-related modules (Xt and Xm) you will have to do more work: they
are currently not part of the standard Python distribution. You will are currently not part of the standard Python distribution. You will
@ -1498,9 +1537,9 @@ due to Jack Jansen:
# Child # Child
os.close(0) os.close(0)
os.close(1) os.close(1)
if os.dup(p2cread) <> 0: if os.dup(p2cread) != 0:
sys.stderr.write('popen2: bad read dup\n') sys.stderr.write('popen2: bad read dup\n')
if os.dup(c2pwrite) <> 1: if os.dup(c2pwrite) != 1:
sys.stderr.write('popen2: bad write dup\n') sys.stderr.write('popen2: bad write dup\n')
for i in range(3, MAXFD): for i in range(3, MAXFD):
try: try:
@ -1568,6 +1607,95 @@ string.strip() which removes surrounding whitespace from a string).
For more complicated input parsing, regular expressions (see module For more complicated input parsing, regular expressions (see module
regex) are better suited and more powerful than C's scanf(). regex) are better suited and more powerful than C's scanf().
4.34. Q. Can I have Tk events handled while waiting for I/O?
A. Yes, and you don't even need threads! But you'll have to
restructure your I/O code a bit. Tk has the equivalent of Xt's
XtAddInput() call, which allows you to register a callback function
which will be called from the Tk mainloop when I/O is possible on a
file descriptor. Here's what you need:
from Tkinter import tkinter
tkinter.createfilehandler(file, mask, callback)
The file may be a Python file or socket object (actually, anything
with a fileno() method), or an integer file descriptor. The mask is
one of the constants tkinter.READABLE or tkinter.WRITABLE. The
callback is called as follows:
callback(file, mask)
You must unregister the callback when you're done, using
tkinter.deletefilehandler(file)
Note: since you don't know *how many bytes* are available for reading,
you can't use the Python file object's read or readline methods, since
these will insist on reading a predefined number of bytes. For
sockets, the recv() or recvfrom() methods will work fine; for other
files, use os.read(file.fileno(), maxbytecount).
4.35. Q. How do I write a function with output parameters (call by reference)?
A. [Mark Lutz] The thing to remember is that arguments are passed by
assignment in Python. Since assignment just creates references to
objects, there's no alias between an argument name in the caller and
callee, and so no call-by-reference per se. But you can simulate it
in a number of ways:
1) By using global variables; but you probably shouldn't :-)
2) By passing a mutable (changeable in-place) object:
def func1(a):
a[0] = 'new-value' # 'a' references a mutable list
a[1] = a[1] + 1 # changes a shared object
args = ['old-value', 99]
func1(args)
print args[0], args[1] # output: new-value 100
3) By return a tuple, holding the final values of arguments:
def func2(a, b):
a = 'new-value' # a and b are local names
b = b + 1 # assigned to new objects
return a, b # return new values
x, y = 'old-value', 99
x, y = func2(x, y)
print x, y # output: new-value 100
4) And other ideas that fall-out from Python's object model. For
instance, it might be clearer to pass in a mutable dictionary:
def func3(args):
args['a'] = 'new-value' # args is a mutable dictionary
args['b'] = args['b'] + 1 # change it in-place
args = {'a':' old-value', 'b': 99}
func3(args)
print args['a'], args['b']
5) Or bundle-up values in a class instance:
class callByRef:
def __init__(self, **args):
for (key, value) in args.items():
setattr(self, key, value)
def func4(args):
args.a = 'new-value' # args is a mutable callByRef
args.b = args.b + 1 # change object in-place
args = callByRef(a='old-value', b=99)
func4(args)
print args.a, args.b
But there's probably no good reason to get this complicated :-).
[Python' author favors solution 3 in most cases.]
5. Extending Python 5. Extending Python
=================== ===================