merge commit.
diff --git a/Lib/ctypes/util.py b/Lib/ctypes/util.py
index e4c204d..6815f94 100644
--- a/Lib/ctypes/util.py
+++ b/Lib/ctypes/util.py
@@ -137,9 +137,7 @@
             rv = f.close()
             if rv == 10:
                 raise OSError('objdump command not found')
-            with contextlib.closing(os.popen(cmd)) as f:
-                data = f.read()
-            res = re.search(r'\sSONAME\s+([^\s]+)', data)
+            res = re.search(r'\sSONAME\s+([^\s]+)', dump)
             if not res:
                 return None
             return res.group(1)
diff --git a/Misc/NEWS b/Misc/NEWS
index 9ecd4a7..4009e74 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -163,6 +163,9 @@
 
 - Issue #11109 -  New service_action method for BaseServer, used by
   ForkingMixin class for cleanup. Initial Patch by Justin Wark.
+  
+- Issue #12045: Avoid duplicate execution of command in ctypes.util._get_soname().
+  Patch by Sijin Joseph.
 
 - Issue #10818: Remove the Tk GUI and the serve() function of the pydoc module,
   pydoc -g has been deprecated in Python 3.2 and it has a new enhanced web