diff --git a/tests/hwsim/hostapd.py b/tests/hwsim/hostapd.py
index 9d670768b..51ad02e17 100644
--- a/tests/hwsim/hostapd.py
+++ b/tests/hwsim/hostapd.py
@@ -42,11 +42,14 @@ class HostapdGlobal:
             self.dbg = hostname + "/" + str(port)
         self.mon.attach()
 
-    def cmd_execute(self, cmd_array):
+    def cmd_execute(self, cmd_array, shell=False):
         if self.hostname is None:
-            cmd = ' '.join(cmd_array)
+            if shell:
+                cmd = ' '.join(cmd_array)
+            else:
+                cmd = cmd_array
             proc = subprocess.Popen(cmd, stderr=subprocess.STDOUT,
-                                    stdout=subprocess.PIPE, shell=True)
+                                    stdout=subprocess.PIPE, shell=shell)
             out = proc.communicate()[0]
             ret = proc.returncode
             return ret, out
@@ -146,14 +149,14 @@ class Hostapd:
         self.bssid = None
         self.bssidx = bssidx
 
-    def cmd_execute(self, cmd_array):
+    def cmd_execute(self, cmd_array, shell=False):
         if self.hostname is None:
-            cmd = ""
-            for arg in cmd_array:
-                cmd += arg + " "
-            cmd = cmd.strip()
+            if shell:
+                cmd = ' '.join(cmd_array)
+            else:
+                cmd = cmd_array
             proc = subprocess.Popen(cmd, stderr=subprocess.STDOUT,
-                                    stdout=subprocess.PIPE, shell=True)
+                                    stdout=subprocess.PIPE, shell=shell)
             out = proc.communicate()[0]
             ret = proc.returncode
             return ret, out
@@ -588,6 +591,6 @@ def ht40_minus_params(channel="1", ssid=None, country=None):
     params['ht_capab'] = "[HT40-]"
     return params
 
-def cmd_execute(apdev, cmd):
+def cmd_execute(apdev, cmd, shell=False):
     hapd_global = HostapdGlobal(apdev)
-    return hapd_global.cmd_execute(cmd)
+    return hapd_global.cmd_execute(cmd, shell=shell)
diff --git a/tests/hwsim/test_ap_ciphers.py b/tests/hwsim/test_ap_ciphers.py
index cbb2b2feb..1d7877cb5 100644
--- a/tests/hwsim/test_ap_ciphers.py
+++ b/tests/hwsim/test_ap_ciphers.py
@@ -86,12 +86,14 @@ def test_ap_cipher_tkip_countermeasures_ap(dev, apdev):
                    pairwise="TKIP", group="TKIP", scan_freq="2412")
 
     dev[0].dump_monitor()
-    dev[0].cmd_execute([ "echo", "-n", apdev[0]['bssid'], ">", testfile ])
+    dev[0].cmd_execute([ "echo", "-n", apdev[0]['bssid'], ">", testfile ],
+                       shell=True)
     ev = dev[0].wait_event(["CTRL-EVENT-DISCONNECTED"], timeout=1)
     if ev is not None:
         raise Exception("Unexpected disconnection on first Michael MIC failure")
 
-    dev[0].cmd_execute([ "echo", "-n", "ff:ff:ff:ff:ff:ff", ">", testfile ])
+    dev[0].cmd_execute([ "echo", "-n", "ff:ff:ff:ff:ff:ff", ">", testfile ],
+                       shell=True)
     ev = dev[0].wait_disconnected(timeout=10,
                                   error="No disconnection after two Michael MIC failures")
     if "reason=14" not in ev:
@@ -118,12 +120,14 @@ def test_ap_cipher_tkip_countermeasures_sta(dev, apdev):
                    pairwise="TKIP", group="TKIP", scan_freq="2412")
 
     dev[0].dump_monitor()
-    hapd.cmd_execute([ "echo", "-n", dev[0].own_addr(), ">", testfile ])
+    hapd.cmd_execute([ "echo", "-n", dev[0].own_addr(), ">", testfile ],
+                     shell=True)
     ev = dev[0].wait_event(["CTRL-EVENT-DISCONNECTED"], timeout=1)
     if ev is not None:
         raise Exception("Unexpected disconnection on first Michael MIC failure")
 
-    hapd.cmd_execute([ "echo", "-n", "ff:ff:ff:ff:ff:ff", ">", testfile ])
+    hapd.cmd_execute([ "echo", "-n", "ff:ff:ff:ff:ff:ff", ">", testfile ],
+                     shell=True)
     ev = dev[0].wait_disconnected(timeout=10,
                                   error="No disconnection after two Michael MIC failures")
     if "reason=14 locally_generated=1" not in ev:
diff --git a/tests/hwsim/wpasupplicant.py b/tests/hwsim/wpasupplicant.py
index 1f456905b..a62a209bc 100644
--- a/tests/hwsim/wpasupplicant.py
+++ b/tests/hwsim/wpasupplicant.py
@@ -49,11 +49,14 @@ class WpaSupplicant:
         else:
             self.global_mon = None
 
-    def cmd_execute(self, cmd_array):
+    def cmd_execute(self, cmd_array, shell=False):
         if self.hostname is None:
-            cmd = ' '.join(cmd_array)
+            if shell:
+                cmd = ' '.join(cmd_array)
+            else:
+                cmd = cmd_array
             proc = subprocess.Popen(cmd, stderr=subprocess.STDOUT,
-                                    stdout=subprocess.PIPE, shell=True)
+                                    stdout=subprocess.PIPE, shell=shell)
             out = proc.communicate()[0]
             ret = proc.returncode
             return ret, out