1:tocdepth: 2 2 3========================= 4Library and Extension FAQ 5========================= 6 7.. only:: html 8 9 .. contents:: 10 11General Library Questions 12========================= 13 14How do I find a module or application to perform task X? 15-------------------------------------------------------- 16 17Check :ref:`the Library Reference <library-index>` to see if there's a relevant 18standard library module. (Eventually you'll learn what's in the standard 19library and will be able to skip this step.) 20 21For third-party packages, search the `Python Package Index 22<https://pypi.org>`_ or try `Google <https://www.google.com>`_ or 23another web search engine. Searching for "Python" plus a keyword or two for 24your topic of interest will usually find something helpful. 25 26 27Where is the math.py (socket.py, regex.py, etc.) source file? 28------------------------------------------------------------- 29 30If you can't find a source file for a module it may be a built-in or 31dynamically loaded module implemented in C, C++ or other compiled language. 32In this case you may not have the source file or it may be something like 33:file:`mathmodule.c`, somewhere in a C source directory (not on the Python Path). 34 35There are (at least) three kinds of modules in Python: 36 371) modules written in Python (.py); 382) modules written in C and dynamically loaded (.dll, .pyd, .so, .sl, etc); 393) modules written in C and linked with the interpreter; to get a list of these, 40 type:: 41 42 import sys 43 print(sys.builtin_module_names) 44 45 46How do I make a Python script executable on Unix? 47------------------------------------------------- 48 49You need to do two things: the script file's mode must be executable and the 50first line must begin with ``#!`` followed by the path of the Python 51interpreter. 52 53The first is done by executing ``chmod +x scriptfile`` or perhaps ``chmod 755 54scriptfile``. 55 56The second can be done in a number of ways. The most straightforward way is to 57write :: 58 59 #!/usr/local/bin/python 60 61as the very first line of your file, using the pathname for where the Python 62interpreter is installed on your platform. 63 64If you would like the script to be independent of where the Python interpreter 65lives, you can use the :program:`env` program. Almost all Unix variants support 66the following, assuming the Python interpreter is in a directory on the user's 67:envvar:`PATH`:: 68 69 #!/usr/bin/env python 70 71*Don't* do this for CGI scripts. The :envvar:`PATH` variable for CGI scripts is 72often very minimal, so you need to use the actual absolute pathname of the 73interpreter. 74 75Occasionally, a user's environment is so full that the :program:`/usr/bin/env` 76program fails; or there's no env program at all. In that case, you can try the 77following hack (due to Alex Rezinsky): 78 79.. code-block:: sh 80 81 #! /bin/sh 82 """:" 83 exec python $0 ${1+"$@"} 84 """ 85 86The minor disadvantage is that this defines the script's __doc__ string. 87However, you can fix that by adding :: 88 89 __doc__ = """...Whatever...""" 90 91 92 93Is there a curses/termcap package for Python? 94--------------------------------------------- 95 96.. XXX curses *is* built by default, isn't it? 97 98For Unix variants: The standard Python source distribution comes with a curses 99module in the :source:`Modules` subdirectory, though it's not compiled by default. 100(Note that this is not available in the Windows distribution -- there is no 101curses module for Windows.) 102 103The :mod:`curses` module supports basic curses features as well as many additional 104functions from ncurses and SYSV curses such as colour, alternative character set 105support, pads, and mouse support. This means the module isn't compatible with 106operating systems that only have BSD curses, but there don't seem to be any 107currently maintained OSes that fall into this category. 108 109 110Is there an equivalent to C's onexit() in Python? 111------------------------------------------------- 112 113The :mod:`atexit` module provides a register function that is similar to C's 114:c:func:`onexit`. 115 116 117Why don't my signal handlers work? 118---------------------------------- 119 120The most common problem is that the signal handler is declared with the wrong 121argument list. It is called as :: 122 123 handler(signum, frame) 124 125so it should be declared with two parameters:: 126 127 def handler(signum, frame): 128 ... 129 130 131Common tasks 132============ 133 134How do I test a Python program or component? 135-------------------------------------------- 136 137Python comes with two testing frameworks. The :mod:`doctest` module finds 138examples in the docstrings for a module and runs them, comparing the output with 139the expected output given in the docstring. 140 141The :mod:`unittest` module is a fancier testing framework modelled on Java and 142Smalltalk testing frameworks. 143 144To make testing easier, you should use good modular design in your program. 145Your program should have almost all functionality 146encapsulated in either functions or class methods -- and this sometimes has the 147surprising and delightful effect of making the program run faster (because local 148variable accesses are faster than global accesses). Furthermore the program 149should avoid depending on mutating global variables, since this makes testing 150much more difficult to do. 151 152The "global main logic" of your program may be as simple as :: 153 154 if __name__ == "__main__": 155 main_logic() 156 157at the bottom of the main module of your program. 158 159Once your program is organized as a tractable collection of function and class 160behaviours, you should write test functions that exercise the behaviours. A 161test suite that automates a sequence of tests can be associated with each module. 162This sounds like a lot of work, but since Python is so terse and flexible it's 163surprisingly easy. You can make coding much more pleasant and fun by writing 164your test functions in parallel with the "production code", since this makes it 165easy to find bugs and even design flaws earlier. 166 167"Support modules" that are not intended to be the main module of a program may 168include a self-test of the module. :: 169 170 if __name__ == "__main__": 171 self_test() 172 173Even programs that interact with complex external interfaces may be tested when 174the external interfaces are unavailable by using "fake" interfaces implemented 175in Python. 176 177 178How do I create documentation from doc strings? 179----------------------------------------------- 180 181The :mod:`pydoc` module can create HTML from the doc strings in your Python 182source code. An alternative for creating API documentation purely from 183docstrings is `epydoc <https://epydoc.sourceforge.net/>`_. `Sphinx 184<https://www.sphinx-doc.org>`_ can also include docstring content. 185 186 187How do I get a single keypress at a time? 188----------------------------------------- 189 190For Unix variants there are several solutions. It's straightforward to do this 191using curses, but curses is a fairly large module to learn. 192 193.. XXX this doesn't work out of the box, some IO expert needs to check why 194 195 Here's a solution without curses:: 196 197 import termios, fcntl, sys, os 198 fd = sys.stdin.fileno() 199 200 oldterm = termios.tcgetattr(fd) 201 newattr = termios.tcgetattr(fd) 202 newattr[3] = newattr[3] & ~termios.ICANON & ~termios.ECHO 203 termios.tcsetattr(fd, termios.TCSANOW, newattr) 204 205 oldflags = fcntl.fcntl(fd, fcntl.F_GETFL) 206 fcntl.fcntl(fd, fcntl.F_SETFL, oldflags | os.O_NONBLOCK) 207 208 try: 209 while True: 210 try: 211 c = sys.stdin.read(1) 212 print("Got character", repr(c)) 213 except OSError: 214 pass 215 finally: 216 termios.tcsetattr(fd, termios.TCSAFLUSH, oldterm) 217 fcntl.fcntl(fd, fcntl.F_SETFL, oldflags) 218 219 You need the :mod:`termios` and the :mod:`fcntl` module for any of this to 220 work, and I've only tried it on Linux, though it should work elsewhere. In 221 this code, characters are read and printed one at a time. 222 223 :func:`termios.tcsetattr` turns off stdin's echoing and disables canonical 224 mode. :func:`fcntl.fnctl` is used to obtain stdin's file descriptor flags 225 and modify them for non-blocking mode. Since reading stdin when it is empty 226 results in an :exc:`OSError`, this error is caught and ignored. 227 228 .. versionchanged:: 3.3 229 *sys.stdin.read* used to raise :exc:`IOError`. Starting from Python 3.3 230 :exc:`IOError` is alias for :exc:`OSError`. 231 232 233Threads 234======= 235 236How do I program using threads? 237------------------------------- 238 239Be sure to use the :mod:`threading` module and not the :mod:`_thread` module. 240The :mod:`threading` module builds convenient abstractions on top of the 241low-level primitives provided by the :mod:`_thread` module. 242 243 244None of my threads seem to run: why? 245------------------------------------ 246 247As soon as the main thread exits, all threads are killed. Your main thread is 248running too quickly, giving the threads no time to do any work. 249 250A simple fix is to add a sleep to the end of the program that's long enough for 251all the threads to finish:: 252 253 import threading, time 254 255 def thread_task(name, n): 256 for i in range(n): 257 print(name, i) 258 259 for i in range(10): 260 T = threading.Thread(target=thread_task, args=(str(i), i)) 261 T.start() 262 263 time.sleep(10) # <---------------------------! 264 265But now (on many platforms) the threads don't run in parallel, but appear to run 266sequentially, one at a time! The reason is that the OS thread scheduler doesn't 267start a new thread until the previous thread is blocked. 268 269A simple fix is to add a tiny sleep to the start of the run function:: 270 271 def thread_task(name, n): 272 time.sleep(0.001) # <--------------------! 273 for i in range(n): 274 print(name, i) 275 276 for i in range(10): 277 T = threading.Thread(target=thread_task, args=(str(i), i)) 278 T.start() 279 280 time.sleep(10) 281 282Instead of trying to guess a good delay value for :func:`time.sleep`, 283it's better to use some kind of semaphore mechanism. One idea is to use the 284:mod:`queue` module to create a queue object, let each thread append a token to 285the queue when it finishes, and let the main thread read as many tokens from the 286queue as there are threads. 287 288 289How do I parcel out work among a bunch of worker threads? 290--------------------------------------------------------- 291 292The easiest way is to use the :mod:`concurrent.futures` module, 293especially the :mod:`~concurrent.futures.ThreadPoolExecutor` class. 294 295Or, if you want fine control over the dispatching algorithm, you can write 296your own logic manually. Use the :mod:`queue` module to create a queue 297containing a list of jobs. The :class:`~queue.Queue` class maintains a 298list of objects and has a ``.put(obj)`` method that adds items to the queue and 299a ``.get()`` method to return them. The class will take care of the locking 300necessary to ensure that each job is handed out exactly once. 301 302Here's a trivial example:: 303 304 import threading, queue, time 305 306 # The worker thread gets jobs off the queue. When the queue is empty, it 307 # assumes there will be no more work and exits. 308 # (Realistically workers will run until terminated.) 309 def worker(): 310 print('Running worker') 311 time.sleep(0.1) 312 while True: 313 try: 314 arg = q.get(block=False) 315 except queue.Empty: 316 print('Worker', threading.current_thread(), end=' ') 317 print('queue empty') 318 break 319 else: 320 print('Worker', threading.current_thread(), end=' ') 321 print('running with argument', arg) 322 time.sleep(0.5) 323 324 # Create queue 325 q = queue.Queue() 326 327 # Start a pool of 5 workers 328 for i in range(5): 329 t = threading.Thread(target=worker, name='worker %i' % (i+1)) 330 t.start() 331 332 # Begin adding work to the queue 333 for i in range(50): 334 q.put(i) 335 336 # Give threads time to run 337 print('Main thread sleeping') 338 time.sleep(5) 339 340When run, this will produce the following output: 341 342.. code-block:: none 343 344 Running worker 345 Running worker 346 Running worker 347 Running worker 348 Running worker 349 Main thread sleeping 350 Worker <Thread(worker 1, started 130283832797456)> running with argument 0 351 Worker <Thread(worker 2, started 130283824404752)> running with argument 1 352 Worker <Thread(worker 3, started 130283816012048)> running with argument 2 353 Worker <Thread(worker 4, started 130283807619344)> running with argument 3 354 Worker <Thread(worker 5, started 130283799226640)> running with argument 4 355 Worker <Thread(worker 1, started 130283832797456)> running with argument 5 356 ... 357 358Consult the module's documentation for more details; the :class:`~queue.Queue` 359class provides a featureful interface. 360 361 362What kinds of global value mutation are thread-safe? 363---------------------------------------------------- 364 365A :term:`global interpreter lock` (GIL) is used internally to ensure that only one 366thread runs in the Python VM at a time. In general, Python offers to switch 367among threads only between bytecode instructions; how frequently it switches can 368be set via :func:`sys.setswitchinterval`. Each bytecode instruction and 369therefore all the C implementation code reached from each instruction is 370therefore atomic from the point of view of a Python program. 371 372In theory, this means an exact accounting requires an exact understanding of the 373PVM bytecode implementation. In practice, it means that operations on shared 374variables of built-in data types (ints, lists, dicts, etc) that "look atomic" 375really are. 376 377For example, the following operations are all atomic (L, L1, L2 are lists, D, 378D1, D2 are dicts, x, y are objects, i, j are ints):: 379 380 L.append(x) 381 L1.extend(L2) 382 x = L[i] 383 x = L.pop() 384 L1[i:j] = L2 385 L.sort() 386 x = y 387 x.field = y 388 D[x] = y 389 D1.update(D2) 390 D.keys() 391 392These aren't:: 393 394 i = i+1 395 L.append(L[-1]) 396 L[i] = L[j] 397 D[x] = D[x] + 1 398 399Operations that replace other objects may invoke those other objects' 400:meth:`__del__` method when their reference count reaches zero, and that can 401affect things. This is especially true for the mass updates to dictionaries and 402lists. When in doubt, use a mutex! 403 404 405Can't we get rid of the Global Interpreter Lock? 406------------------------------------------------ 407 408.. XXX link to dbeazley's talk about GIL? 409 410The :term:`global interpreter lock` (GIL) is often seen as a hindrance to Python's 411deployment on high-end multiprocessor server machines, because a multi-threaded 412Python program effectively only uses one CPU, due to the insistence that 413(almost) all Python code can only run while the GIL is held. 414 415Back in the days of Python 1.5, Greg Stein actually implemented a comprehensive 416patch set (the "free threading" patches) that removed the GIL and replaced it 417with fine-grained locking. Adam Olsen recently did a similar experiment 418in his `python-safethread <https://code.google.com/archive/p/python-safethread>`_ 419project. Unfortunately, both experiments exhibited a sharp drop in single-thread 420performance (at least 30% slower), due to the amount of fine-grained locking 421necessary to compensate for the removal of the GIL. 422 423This doesn't mean that you can't make good use of Python on multi-CPU machines! 424You just have to be creative with dividing the work up between multiple 425*processes* rather than multiple *threads*. The 426:class:`~concurrent.futures.ProcessPoolExecutor` class in the new 427:mod:`concurrent.futures` module provides an easy way of doing so; the 428:mod:`multiprocessing` module provides a lower-level API in case you want 429more control over dispatching of tasks. 430 431Judicious use of C extensions will also help; if you use a C extension to 432perform a time-consuming task, the extension can release the GIL while the 433thread of execution is in the C code and allow other threads to get some work 434done. Some standard library modules such as :mod:`zlib` and :mod:`hashlib` 435already do this. 436 437It has been suggested that the GIL should be a per-interpreter-state lock rather 438than truly global; interpreters then wouldn't be able to share objects. 439Unfortunately, this isn't likely to happen either. It would be a tremendous 440amount of work, because many object implementations currently have global state. 441For example, small integers and short strings are cached; these caches would 442have to be moved to the interpreter state. Other object types have their own 443free list; these free lists would have to be moved to the interpreter state. 444And so on. 445 446And I doubt that it can even be done in finite time, because the same problem 447exists for 3rd party extensions. It is likely that 3rd party extensions are 448being written at a faster rate than you can convert them to store all their 449global state in the interpreter state. 450 451And finally, once you have multiple interpreters not sharing any state, what 452have you gained over running each interpreter in a separate process? 453 454 455Input and Output 456================ 457 458How do I delete a file? (And other file questions...) 459----------------------------------------------------- 460 461Use ``os.remove(filename)`` or ``os.unlink(filename)``; for documentation, see 462the :mod:`os` module. The two functions are identical; :func:`~os.unlink` is simply 463the name of the Unix system call for this function. 464 465To remove a directory, use :func:`os.rmdir`; use :func:`os.mkdir` to create one. 466``os.makedirs(path)`` will create any intermediate directories in ``path`` that 467don't exist. ``os.removedirs(path)`` will remove intermediate directories as 468long as they're empty; if you want to delete an entire directory tree and its 469contents, use :func:`shutil.rmtree`. 470 471To rename a file, use ``os.rename(old_path, new_path)``. 472 473To truncate a file, open it using ``f = open(filename, "rb+")``, and use 474``f.truncate(offset)``; offset defaults to the current seek position. There's 475also ``os.ftruncate(fd, offset)`` for files opened with :func:`os.open`, where 476*fd* is the file descriptor (a small integer). 477 478The :mod:`shutil` module also contains a number of functions to work on files 479including :func:`~shutil.copyfile`, :func:`~shutil.copytree`, and 480:func:`~shutil.rmtree`. 481 482 483How do I copy a file? 484--------------------- 485 486The :mod:`shutil` module contains a :func:`~shutil.copyfile` function. 487Note that on Windows NTFS volumes, it does not copy 488`alternate data streams 489<https://en.wikipedia.org/wiki/NTFS#Alternate_data_stream_(ADS)>`_ 490nor `resource forks <https://en.wikipedia.org/wiki/Resource_fork>`__ 491on macOS HFS+ volumes, though both are now rarely used. 492It also doesn't copy file permissions and metadata, though using 493:func:`shutil.copy2` instead will preserve most (though not all) of it. 494 495 496How do I read (or write) binary data? 497------------------------------------- 498 499To read or write complex binary data formats, it's best to use the :mod:`struct` 500module. It allows you to take a string containing binary data (usually numbers) 501and convert it to Python objects; and vice versa. 502 503For example, the following code reads two 2-byte integers and one 4-byte integer 504in big-endian format from a file:: 505 506 import struct 507 508 with open(filename, "rb") as f: 509 s = f.read(8) 510 x, y, z = struct.unpack(">hhl", s) 511 512The '>' in the format string forces big-endian data; the letter 'h' reads one 513"short integer" (2 bytes), and 'l' reads one "long integer" (4 bytes) from the 514string. 515 516For data that is more regular (e.g. a homogeneous list of ints or floats), 517you can also use the :mod:`array` module. 518 519.. note:: 520 521 To read and write binary data, it is mandatory to open the file in 522 binary mode (here, passing ``"rb"`` to :func:`open`). If you use 523 ``"r"`` instead (the default), the file will be open in text mode 524 and ``f.read()`` will return :class:`str` objects rather than 525 :class:`bytes` objects. 526 527 528I can't seem to use os.read() on a pipe created with os.popen(); why? 529--------------------------------------------------------------------- 530 531:func:`os.read` is a low-level function which takes a file descriptor, a small 532integer representing the opened file. :func:`os.popen` creates a high-level 533file object, the same type returned by the built-in :func:`open` function. 534Thus, to read *n* bytes from a pipe *p* created with :func:`os.popen`, you need to 535use ``p.read(n)``. 536 537 538.. XXX update to use subprocess. See the :ref:`subprocess-replacements` section. 539 540 How do I run a subprocess with pipes connected to both input and output? 541 ------------------------------------------------------------------------ 542 543 Use the :mod:`popen2` module. For example:: 544 545 import popen2 546 fromchild, tochild = popen2.popen2("command") 547 tochild.write("input\n") 548 tochild.flush() 549 output = fromchild.readline() 550 551 Warning: in general it is unwise to do this because you can easily cause a 552 deadlock where your process is blocked waiting for output from the child 553 while the child is blocked waiting for input from you. This can be caused 554 by the parent expecting the child to output more text than it does or 555 by data being stuck in stdio buffers due to lack of flushing. 556 The Python parent can of course explicitly flush the data it sends to the 557 child before it reads any output, but if the child is a naive C program it 558 may have been written to never explicitly flush its output, even if it is 559 interactive, since flushing is normally automatic. 560 561 Note that a deadlock is also possible if you use :func:`popen3` to read 562 stdout and stderr. If one of the two is too large for the internal buffer 563 (increasing the buffer size does not help) and you ``read()`` the other one 564 first, there is a deadlock, too. 565 566 Note on a bug in popen2: unless your program calls ``wait()`` or 567 ``waitpid()``, finished child processes are never removed, and eventually 568 calls to popen2 will fail because of a limit on the number of child 569 processes. Calling :func:`os.waitpid` with the :data:`os.WNOHANG` option can 570 prevent this; a good place to insert such a call would be before calling 571 ``popen2`` again. 572 573 In many cases, all you really need is to run some data through a command and 574 get the result back. Unless the amount of data is very large, the easiest 575 way to do this is to write it to a temporary file and run the command with 576 that temporary file as input. The standard module :mod:`tempfile` exports a 577 :func:`~tempfile.mktemp` function to generate unique temporary file names. :: 578 579 import tempfile 580 import os 581 582 class Popen3: 583 """ 584 This is a deadlock-safe version of popen that returns 585 an object with errorlevel, out (a string) and err (a string). 586 (capturestderr may not work under windows.) 587 Example: print(Popen3('grep spam','\n\nhere spam\n\n').out) 588 """ 589 def __init__(self,command,input=None,capturestderr=None): 590 outfile=tempfile.mktemp() 591 command="( %s ) > %s" % (command,outfile) 592 if input: 593 infile=tempfile.mktemp() 594 open(infile,"w").write(input) 595 command=command+" <"+infile 596 if capturestderr: 597 errfile=tempfile.mktemp() 598 command=command+" 2>"+errfile 599 self.errorlevel=os.system(command) >> 8 600 self.out=open(outfile,"r").read() 601 os.remove(outfile) 602 if input: 603 os.remove(infile) 604 if capturestderr: 605 self.err=open(errfile,"r").read() 606 os.remove(errfile) 607 608 Note that many interactive programs (e.g. vi) don't work well with pipes 609 substituted for standard input and output. You will have to use pseudo ttys 610 ("ptys") instead of pipes. Or you can use a Python interface to Don Libes' 611 "expect" library. A Python extension that interfaces to expect is called 612 "expy" and available from https://expectpy.sourceforge.net. A pure Python 613 solution that works like expect is `pexpect 614 <https://pypi.org/project/pexpect/>`_. 615 616 617How do I access the serial (RS232) port? 618---------------------------------------- 619 620For Win32, OSX, Linux, BSD, Jython, IronPython: 621 622 https://pypi.org/project/pyserial/ 623 624For Unix, see a Usenet post by Mitch Chapman: 625 626 https://groups.google.com/groups?selm=34A04430.CF9@ohioee.com 627 628 629Why doesn't closing sys.stdout (stdin, stderr) really close it? 630--------------------------------------------------------------- 631 632Python :term:`file objects <file object>` are a high-level layer of 633abstraction on low-level C file descriptors. 634 635For most file objects you create in Python via the built-in :func:`open` 636function, ``f.close()`` marks the Python file object as being closed from 637Python's point of view, and also arranges to close the underlying C file 638descriptor. This also happens automatically in ``f``'s destructor, when 639``f`` becomes garbage. 640 641But stdin, stdout and stderr are treated specially by Python, because of the 642special status also given to them by C. Running ``sys.stdout.close()`` marks 643the Python-level file object as being closed, but does *not* close the 644associated C file descriptor. 645 646To close the underlying C file descriptor for one of these three, you should 647first be sure that's what you really want to do (e.g., you may confuse 648extension modules trying to do I/O). If it is, use :func:`os.close`:: 649 650 os.close(stdin.fileno()) 651 os.close(stdout.fileno()) 652 os.close(stderr.fileno()) 653 654Or you can use the numeric constants 0, 1 and 2, respectively. 655 656 657Network/Internet Programming 658============================ 659 660What WWW tools are there for Python? 661------------------------------------ 662 663See the chapters titled :ref:`internet` and :ref:`netdata` in the Library 664Reference Manual. Python has many modules that will help you build server-side 665and client-side web systems. 666 667.. XXX check if wiki page is still up to date 668 669A summary of available frameworks is maintained by Paul Boddie at 670https://wiki.python.org/moin/WebProgramming\ . 671 672Cameron Laird maintains a useful set of pages about Python web technologies at 673https://web.archive.org/web/20210224183619/http://phaseit.net/claird/comp.lang.python/web_python. 674 675 676How can I mimic CGI form submission (METHOD=POST)? 677-------------------------------------------------- 678 679I would like to retrieve web pages that are the result of POSTing a form. Is 680there existing code that would let me do this easily? 681 682Yes. Here's a simple example that uses :mod:`urllib.request`:: 683 684 #!/usr/local/bin/python 685 686 import urllib.request 687 688 # build the query string 689 qs = "First=Josephine&MI=Q&Last=Public" 690 691 # connect and send the server a path 692 req = urllib.request.urlopen('http://www.some-server.out-there' 693 '/cgi-bin/some-cgi-script', data=qs) 694 with req: 695 msg, hdrs = req.read(), req.info() 696 697Note that in general for percent-encoded POST operations, query strings must be 698quoted using :func:`urllib.parse.urlencode`. For example, to send 699``name=Guy Steele, Jr.``:: 700 701 >>> import urllib.parse 702 >>> urllib.parse.urlencode({'name': 'Guy Steele, Jr.'}) 703 'name=Guy+Steele%2C+Jr.' 704 705.. seealso:: :ref:`urllib-howto` for extensive examples. 706 707 708What module should I use to help with generating HTML? 709------------------------------------------------------ 710 711.. XXX add modern template languages 712 713You can find a collection of useful links on the `Web Programming wiki page 714<https://wiki.python.org/moin/WebProgramming>`_. 715 716 717How do I send mail from a Python script? 718---------------------------------------- 719 720Use the standard library module :mod:`smtplib`. 721 722Here's a very simple interactive mail sender that uses it. This method will 723work on any host that supports an SMTP listener. :: 724 725 import sys, smtplib 726 727 fromaddr = input("From: ") 728 toaddrs = input("To: ").split(',') 729 print("Enter message, end with ^D:") 730 msg = '' 731 while True: 732 line = sys.stdin.readline() 733 if not line: 734 break 735 msg += line 736 737 # The actual mail send 738 server = smtplib.SMTP('localhost') 739 server.sendmail(fromaddr, toaddrs, msg) 740 server.quit() 741 742A Unix-only alternative uses sendmail. The location of the sendmail program 743varies between systems; sometimes it is ``/usr/lib/sendmail``, sometimes 744``/usr/sbin/sendmail``. The sendmail manual page will help you out. Here's 745some sample code:: 746 747 import os 748 749 SENDMAIL = "/usr/sbin/sendmail" # sendmail location 750 p = os.popen("%s -t -i" % SENDMAIL, "w") 751 p.write("To: receiver@example.com\n") 752 p.write("Subject: test\n") 753 p.write("\n") # blank line separating headers from body 754 p.write("Some text\n") 755 p.write("some more text\n") 756 sts = p.close() 757 if sts != 0: 758 print("Sendmail exit status", sts) 759 760 761How do I avoid blocking in the connect() method of a socket? 762------------------------------------------------------------ 763 764The :mod:`select` module is commonly used to help with asynchronous I/O on 765sockets. 766 767To prevent the TCP connect from blocking, you can set the socket to non-blocking 768mode. Then when you do the :meth:`socket.connect`, you will either connect immediately 769(unlikely) or get an exception that contains the error number as ``.errno``. 770``errno.EINPROGRESS`` indicates that the connection is in progress, but hasn't 771finished yet. Different OSes will return different values, so you're going to 772have to check what's returned on your system. 773 774You can use the :meth:`socket.connect_ex` method to avoid creating an exception. It will 775just return the errno value. To poll, you can call :meth:`socket.connect_ex` again later 776-- ``0`` or ``errno.EISCONN`` indicate that you're connected -- or you can pass this 777socket to :meth:`select.select` to check if it's writable. 778 779.. note:: 780 The :mod:`asyncio` module provides a general purpose single-threaded and 781 concurrent asynchronous library, which can be used for writing non-blocking 782 network code. 783 The third-party `Twisted <https://twisted.org/>`_ library is 784 a popular and feature-rich alternative. 785 786 787Databases 788========= 789 790Are there any interfaces to database packages in Python? 791-------------------------------------------------------- 792 793Yes. 794 795Interfaces to disk-based hashes such as :mod:`DBM <dbm.ndbm>` and :mod:`GDBM 796<dbm.gnu>` are also included with standard Python. There is also the 797:mod:`sqlite3` module, which provides a lightweight disk-based relational 798database. 799 800Support for most relational databases is available. See the 801`DatabaseProgramming wiki page 802<https://wiki.python.org/moin/DatabaseProgramming>`_ for details. 803 804 805How do you implement persistent objects in Python? 806-------------------------------------------------- 807 808The :mod:`pickle` library module solves this in a very general way (though you 809still can't store things like open files, sockets or windows), and the 810:mod:`shelve` library module uses pickle and (g)dbm to create persistent 811mappings containing arbitrary Python objects. 812 813 814Mathematics and Numerics 815======================== 816 817How do I generate random numbers in Python? 818------------------------------------------- 819 820The standard module :mod:`random` implements a random number generator. Usage 821is simple:: 822 823 import random 824 random.random() 825 826This returns a random floating point number in the range [0, 1). 827 828There are also many other specialized generators in this module, such as: 829 830* ``randrange(a, b)`` chooses an integer in the range [a, b). 831* ``uniform(a, b)`` chooses a floating point number in the range [a, b). 832* ``normalvariate(mean, sdev)`` samples the normal (Gaussian) distribution. 833 834Some higher-level functions operate on sequences directly, such as: 835 836* ``choice(S)`` chooses a random element from a given sequence. 837* ``shuffle(L)`` shuffles a list in-place, i.e. permutes it randomly. 838 839There's also a ``Random`` class you can instantiate to create independent 840multiple random number generators. 841