Session.open_virtual_file(self, family, geometry, direction, data)[source]

Open a GMT Virtual File to pass data to and from a module.

GMT uses a virtual file scheme to pass in data to API modules. Use it to pass in your GMT data structure (created using create_data) to a module that expects an input or output file.

Use in a with block. Will automatically close the virtual file when leaving the with block. Because of this, no wrapper for GMT_Close_VirtualFile is provided.


A valid GMT data family name (e.g., 'GMT_IS_DATASET'). Should be the same as the one you used to create your data structure.


A valid GMT data geometry name (e.g., 'GMT_IS_POINT'). Should be the same as the one you used to create your data structure.


Either 'GMT_IN' or 'GMT_OUT' to indicate if passing data to GMT or getting it out of GMT, respectively.


The ctypes void pointer to your GMT data structure.


The name of the virtual file that you can pass to a GMT module.


>>> from pygmt.helpers import GMTTempFile
>>> import os
>>> import numpy as np
>>> x = np.array([0, 1, 2, 3, 4])
>>> y = np.array([5, 6, 7, 8, 9])
>>> with Session() as lib:
...     family = 'GMT_IS_DATASET|GMT_VIA_VECTOR'
...     geometry = 'GMT_IS_POINT'
...     dataset = lib.create_data(
...         family=family,
...         geometry=geometry,
...         mode='GMT_CONTAINER_ONLY',
...         dim=[2, 5, 1, 0],  # columns, lines, segments, type
...     )
...     lib.put_vector(dataset, column=0, vector=x)
...     lib.put_vector(dataset, column=1, vector=y)
...     # Add the dataset to a virtual file
...     vfargs = (family, geometry, 'GMT_IN', dataset)
...     with lib.open_virtual_file(*vfargs) as vfile:
...         # Send the output to a temp file so that we can read it
...         with GMTTempFile() as ofile:
...             args = '{} ->{}'.format(vfile,
...             lib.call_module('info', args)
...             print(
<vector memory>: N = 5 <0/4> <5/9>