Python os.readlink() Method
Python is an exceptional programming language with loads of features and methods. One of the most useful modules in the Python ecosystem is the os
module.
This module provides an efficient and portable way of interacting with the operating system. One of the methods from this module is the readlink()
method which allows us to read the contents of a symbolic link.
A symbolic link, also known as a soft link or symlink, is a special kind of file that points to another file or directory. You an think of it as a shortcut in the Windows OS.
Python os.readlink() Method
The os.readlink()
function takes the path to the symbolic link and returns a string representing the path to the actual file or directory. This is shown in the function syntax as shown:
os.readlink(path)
NOTE: The method does not actually follow the symlink. Instead, it simply returns the path to where the symbolic link points to and not the actual contents of the file or directory.
Using the readlink() Method
Let us explore how we can us this method.
Import the OS Module
Before we can use the os.readlink()
method, we need to import the os
module.
import os
Basic Function Usage
Let us start with a simple case of how to use this function.
Suppose we have a symbolic link called sbin
in the /
directory. We can use the readlink()
function to see where the symlink points to as demonstrated in the example below:
import os
link_path = '/sbin'
original_path = os.readlink(link_path)
print(f'The symbolic link {link_path} points to: {original_path}')
The code above should return an output as shown:
The symbolic link /sbin points to: usr/sbin
Handling Errors
As with any method that allows you to interact with the filesystem and the os, there’s a large potentiality for errors.
For example, if you attempt to use the readlink()
method on a file or directory that is not a symlink, the method returns an OSError
. We can try and fix this issue by using a try/except
block as shown:
import os
try:
link_path = '/etc'
original_path = os.readlink(link_path)
print(f'The symbolic link {link_path} points to: {original_path}')
except OSError:
print(f'{link_path} is not a symbolic link.')
Since the provided path /etc
, the code should raise an error which execute the except
block as:
.etc is not a symbolic link
Getting the Absolute Path
To get the full or absolute path of the file or directory the symbolic link is pointing to, you can use os.path.abspath()
in conjunction with os.readlink()
:
import os
link_path = '/sbin'
target_path = os.readlink(link_path)
full_path = os.path.abspath(target_path)
print(f'The symbolic link {link_path} points to: {full_path}')
This will output the absolute path of the file or directory that the symlink is pointing to
The symbolic link /sbin points to: /sbin
Conclusion
In this tutorial, we explored how we can get the file or link pointed by a symbolic link by using the os.readlink()
method in Python. This is handy tool when working with symbolic links in your system, allowing you to handle file system operations more efficiently.