With processing, 'qgis:clip' is not the adequate algorithm because it would produce one shapefile for each feature intersection. In this case, it's preferable to use 'saga:linepolygonintersection'. The complete code is:
import processing
l1 = processing.getObjectFromName('route')
l2 = processing.getObjectFromName('grid')
path = processing.runalg("saga:linepolygonintersection", l1, l2, 0, None)
clipped_line = QgsVectorLayer(path['INTERSECT'],
'clipped_line',
'ogr')
QgsMapLayerRegistry.instance().addMapLayer(clipped_line)
and after it was ran, at the Python Console of QGIS, with this shapefiles:

I got:

It can be observed that the algorithm probably has a bug because there are some not produced features.
To overcome this bad result it could be used this alternative code:
import processing
l1 = processing.getObjectFromName('route')
l2 = processing.getObjectFromName('grid')
l1_feats = [ feat for feat in l1.getFeatures() ]
l2_feats = [ feat for feat in l2.getFeatures() ]
geom_wkt = []
for feat_l1 in l1_feats:
for feat_l2 in l2_feats:
if feat_l1.geometry().intersects(feat_l2.geometry()):
geom = feat_l1.geometry().intersection(feat_l2.geometry())
geom_wkt.append(geom.exportToWkt())
epsg = l1.crs().postgisSrid()
uri = "LineString?crs=epsg:" + str(epsg) + "&field=id:integer""&index=yes"
mem_layer = QgsVectorLayer(uri,
'clipped_line',
'memory')
prov = mem_layer.dataProvider()
feats = [ QgsFeature() for i in range(len(geom_wkt)) ]
for i, feat in enumerate(feats):
feat.setAttributes([i])
feat.setGeometry(QgsGeometry.fromWkt(geom_wkt[i]))
prov.addFeatures(feats)
QgsMapLayerRegistry.instance().addMapLayer(mem_layer)
This one produces the expected result: