<p>上面提到的这个问题有点误会,或者我有一个很大的误会。</p>
<p>*keyword和**keyword用于将参数/资料传递给python代码中的类/函数/方法。</p>
<p>argparse用于从外部/命令行向python程序传递参数/选项。所以你不会得到1对1的复制。然而,argparse是非常可配置的,并且取决于您想要如何完成它,您可以接近。</p>
<p>如果只想传递一个名称,则:</p>
<pre><code>import argparse
parser = argparse.ArgumentParser()
parser.add_argument("name")
args = parser.parse_args()
print args
</code></pre>
<p>会让你:</p>
<pre><code>$ ./pytest.py dave
Namespace(name='dave')
</code></pre>
<p>如果要设置名称以便也可以发送其他内容:</p>
<pre><code>parser.add_argument("-name")
</code></pre>
<p>会让你:</p>
<pre><code>./pytest.py -name dave
Namespace(name='dave')
</code></pre>
<p>但请注意:</p>
<pre><code> ./pytest.py -name dave -name steve
Namespace(name='steve')
</code></pre>
<p>但是:</p>
<pre><code>parser.add_argument("--name")
</code></pre>
<p>将允许/要求:</p>
<pre><code>./pytest.py --name dave
Namespace(name='dave')
./pytest.py --name=dave
Namespace(name='dave')
</code></pre>
<p>如果你:</p>
<pre><code>parser.add_argument("--name", nargs="+")
./pytest.py --name dave steve murphy
Namespace(name=['dave', 'steve', 'murphy'])
</code></pre>
<p>但是:</p>
<pre><code> ./pytest.py --name=dave --name=steve --name=murphy
Namespace(name= ['murphy'])
</code></pre>
<p>(请注意,最后一个列表中只有墨菲。)</p>
<p>所以你可以做的是:</p>
<pre><code>parser.add_argument("--name")
parser.add_argument("--email")
parser.add_argument("--hair-color")
./pytest.py --name fred --hair-color murphy --email example@example.com
Namespace(email='example@example.com', hair_color='murphy', name='fred')
</code></pre>