module main
contains
subroutine print_int(a)
integer :: a
write(*,*) 'Hello from Fortran'
write(*,*) 'a = ', a
end subroutine print_int
subroutine print_mat_val( a )
integer :: a(0:2,0:2)
write(*,*) 'a(1,2) = ', a(1,2)
end subroutine print_mat_val
end module main
Next I create a shared object from this code using F2py, which is part of NumPy
f2py --fcompiler=gnu95 -c -m main main.f90
You can now import the module in Python. For example I create a file called example.py with the following code,
import main
import numpy as np
a = np.array([[1,2,3],[4,5,6],[7,8,9]])
main.main.print_int(5)
main.main.print_mat_val(a)
You can run the Python script by typing,
python example.py
The calls contain main.main because both the file and the module are named 'main'. It isn't necessary to wrap the subroutines in a module, but it could be helpful for more complex code.