title: Why we must use a list in subprocess.Popen?
body: <p>My question is more theoretical than practical, I've found more answers that explains <strong>how</strong> but not <strong>why</strong> should we use a list in a <code>subprocess.Popen</code> call.</p>
  
  <p>For example as is known:</p>
  
  <pre><code>Python 2.7.10 (default, Oct 14 2015, 16:09:02)
  [GCC 5.2.1 20151010] on linux2
  Type "help", "copyright", "credits" or "license" for more information.
  &gt;&gt;&gt; import subprocess
  &gt;&gt;&gt; cmd = subprocess.Popen(["python", "-V"], stdout=subprocess.PIPE)
  Python 2.7.10
  </code></pre>
  
  <p>Then I was messing around in UNIX and found something interesting:</p>
  
  <pre><code>mvarge@ubuntu:~$ strace -f python -V 2&gt;&amp;1
  execve("/usr/bin/python", ["python", "-V"], [/* 29 vars */]) = 0
  </code></pre>
  
  <p>Probably both <code>execve</code> and the list model that <code>subprocess</code> use are someway related, but can anyone give a good explanation for this?</p>
  
  <p>Thanks in advance.</p>