5. A simple command line app

In this part of the tutorial you will build a simple command line application to do a frequency scan.

Start the simulated instrument running the following command:

$ lantz-sim fungen tcp

Open the folder in which you have created the driver (Building your own drivers) and create a python file named scanfrequency.py:

import time

from lantz import Q_

from mydriver import LantzSignalGenerator

Hz = Q_(1, 'Hz')
start = 1 * Hz
stop = 10 * Hz
step = 1 * Hz
wait = .5

with LantzSignalGenerator('TCPIP::localhost::5678::SOCKET') as inst:
    print(inst.idn)

    current = start

    # This loop scans the frequency
    while current < stop:
        inst.frequency = current
        print('Changed to {}'.format(current))
        time.sleep(wait)
        current += step

First we the time module, the quantities class and the driver that you created in the previous tutorial. We could have used the driver included in Lantz, but we will work as if the driver was not in Lantz and you have built it yourself for your project. We create an instance of it using a context manager (the with statement) to make sure that all resources will be properly closed even if an error occurs. Finally, we just step through all the frequencies, changing the instrument and waiting at each step.

Run it using:

$ python scanfrequency.py

5.1. Using command line arguments

In our first implementation the scan range and the waiting time were fixed. We will now add mandatory command line arguments to set the start and stop frequency and optionally the step size and the waiting time. To do this, we will import the argparse module and create a parser object:

import time
import argparse

from lantz import Q_

from mydriver import LantzSignalGenerator

parser = argparse.ArgumentParser()
parser.add_argument('start', type=float,
                    help='Start frequency [Hz]')
parser.add_argument('stop', type=float,
                    help='Stop frequency [Hz]')
parser.add_argument('step', type=float,
                    help='Step frequency [Hz]')
parser.add_argument('wait', type=float,
                    help='Waiting time at each step [s]')

args = parser.parse_args()

Hz = Q_(1, 'Hz')
start = args.start * Hz
stop = args.stop * Hz
step = args.step * Hz
wait = args.wait

with LantzSignalGenerator('TCPIP::localhost::5678::SOCKET') as inst:
    print(inst.idn)

    current = start
    while current < stop:
        inst.frequency = current
        print('Changed to {}'.format(current))
        time.sleep(wait)
        current += step

A nice thing about Python argparse package is that you get the help:

$ python scanfrequency.py

or in more detail:

python scanfrequency.py -h

Try it again specifying the start, stop, step and waiting time:

$ python scanfrequency.py 2 8 2 .1

Learn how in the next part of the tutorial: A simple GUI app.