Skip to main content

Python VISA bindings for GPIB, RS232, and USB instruments

Project description


A Python package for support of the “Virtual Instrument Software Architecture” (VISA), in order to control measurement devices and test equipment via GPIB, RS232, Ethernet or USB.


The programming of measurement instruments can be real pain. There are many different protocols, sent over many different interfaces and bus systems (GPIB, RS232, USB). For every programming language you want to use, you have to find libraries that support both your device and its bus system.

In order to ease this unfortunate situation, the Virtual Instrument Software Architecture (VISA) specification was defined in the middle of the 90’. Today VISA is implemented on all significant operating systems. A couple of vendors offer VISA libraries, partly with free download. These libraries work together with arbitrary peripherical devices, although they may be limited to certain interface devices, such as the vendor’s GPIB card.

The VISA specification has explicit bindings to Visual Basic, C, and G (LabVIEW’s graphical language. However, you can use VISA with any language capable of calling functions in a DLL. Python is such a language.

VISA and Python

Python has a couple of features that make it very interesting for measurement controlling:

  • Python is an easy-to-learn scripting language with short development cycles.
  • It represents a high abstraction level [2], which perfectly blends with the abstraction level of measurement programs.
  • It has a very rich set of native libraries, including numerical and plotting modules for data analysis and visualisation.
  • A large set of books (in many languages) and on-line publications is available.


  • VISA (tested with NI-VISA 3.2, WinXP, from
  • Python (tested with 2.6 and 2.7, 3.2 is on its way)


Using pip:

$ pip install pyvisa

or easy_install:

$ easy_install pyvisa

or download and unzip the source distribution file and:

$ python install


The documentation can be read online at

PyVISA was originally programmed by Torsten Bronger and Gregor Thalhammer, Innsbruck, Austria. It is based on earlier experiences by Thalhammer.

It was maintained from March 2012 to August 2013 by Florian Bauer. It is currently maintained by Hernan E. Grecco <>.

If you think your name should be here, please let me know.

PyVISA Changelog

1.5 (2014-06-24)

  • Python 3.2+ compatibility. (Issue #32)
  • Change source encoding to utf-8.
  • Reorganized package structure. (Issue #13)
  • Improved installation.
  • Moved tests inside the package.
  • Added CI using Travis.
  • Created new wrapper for the underlying library.
  • Moved vpp43 code to legacy subpackage.
  • Moved documentation to readthedocs.
  • Make documentation mobile-friendly. (Issue #2)
  • Removed latex documentation.
  • ResourceManager is no longer a singleton. (Issue #8)
  • VisaLibrary is no longer a singleton. (Issue #7)
  • VISA functions are VisaLibrary methods. (Issue #11)
  • Improved detection of VISA library path in all OS.
  • Added diagnostics functions to help debugging.
  • Added extensive logging to help debugging. (Issue #12)
  • Improved error messages.
  • Added encoding parameter to read and write. (Issue #38)
  • Added termination parameter to read and write. (Issue #38)
  • Added size to read_raw. (Issue #37)
  • Removed delay parameter in favor of ask_delay (Issue #34)
  • Added 64 bits VISA library methods.
  • Cleaned up code.

1.4 (2012-05-13)

  • add coverage
  • add tox testing

1.3 (2008-03-26)

  • Changed licence to MIT.
  • Made determination of resource class even more careful.

1.2 (2007-09-19)

  • Changed some __getattr__ to getattr in order to have working exceptions again (e.g. timeouts) in vpp43
  • Softened the test for “INSTR” even further. Introduced the “stb” property for GPIB instruments.
  • Changed “is not an INSTR” error to a warning.
  • Added correct prefix for RPM in setup.cfg.

1.1 (2006-11-21)

  • Mentioned possible AttributeError with viParseRsrcEx.
  • Made secure against missing viParseRsrcEx.
  • Removed superfluous calls to parse_resource_extended.
  • Script can now handle installation with or without setuptools.
  • Switched to new distutils version.

1.0 (2006-01-23)

  • New properties of SerialInstrument explained.
  • Added many further properties to SerialInstrument.

0.9.7 (2005-09-21)

  • Renamed timeout parameter in open() to open_timeout.
  • Renamed Timeout parameter in open() to open_timeout.
  • Added section about SerialInstrument.
  • Added class SerialInstrument. Made termination characters even more robust.

0.9.6 (2005-08-31)

  • Renamed TypeError to VisaTypeError.
  • Added InvalidBinaryFormat. Renamed TypeError to VisaTypeError.
  • Added a lot of docstrings. Fixed bug with ValueError exception raising.
  • Eliminated string exceptions. A little bit of code clean-up.
  • Added old distutils inclusion for RPM that cause trouble with my setuptools installation.
  • Set default for term_chars to None and implemented it in write() method.
  • Described new default for term_chars.
  • Added instrument(). Fixed bugs in __repr()__.
  • Improved documentation.
  • Switched from distutils to setuptools.

0.9.5 (2005-08-27)

  • Changed package name to “PyVISA”.
  • Switched from distutils to setuptools.

0.9.4 (2005-08-12)

  • Added filename selection for VISA DLL with Windows in
  • Added code to skip over header before binary data.
  • Cleaned up whitespace.
  • Added support for endianess in case of binary transfers.
  • Improved binary reading; now it also accepts things like “#267…”.

0.9.3 (2005-07-21)

  • Changed default termination characters to “” for GPIB instruments. LF and CR are completely stripped from the end of read string, no matter how the termination characters are set.

0.9.2 (2005-07-19)

  • Added remaining keyword arguments for Instrument constructor. Added CR and LF. Added working support for reading binary data.
  • Added ask() and ask_for_values().
  • Partially implemented binary reading.
  • Split the old term_chars in term_chars, delay, and send_end.
  • Implemented warning system for invalid keyword arguments. Added test for valid float values in read_floats(). Added full term_char string in __get_term_char().
  • Standard timeout increased from 2 to 5 seconds.
  • read_floats() returns always a list.
  • Moved trigger() method to Instrument class.
  • Fixed bug in regular expression for termination characters.
  • Fixed bug with ignored term_char attribute for GPIB instruments.
  • Increased chunk_size’s default value and added it to the keyword arguments of the constructor.

0.9.1 (2005-07-03)

  • Added properties resource_name and resource_class to ResourceTemplate. Used both to simplify code.

0.9 (2005-06-29)

  • First usable release. See ChangeLog for more information.

Project details

Release history Release notifications

History Node


History Node


History Node


History Node


History Node


History Node


History Node


This version
History Node


History Node


History Node


History Node


History Node


History Node


History Node


History Node


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Filename, size & hash SHA256 hash help File type Python version Upload date (424.0 kB) Copy SHA256 hash SHA256 Source None Jun 24, 2014

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging CloudAMQP CloudAMQP RabbitMQ AWS AWS Cloud computing Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page