擅长:python、mysql、java
<p>首先,您误解了命令行的解析方式。在</p>
<p>你通过:</p>
<pre><code>python port_scanner.py -H 74.207.244.221 -p 21, 22, 80
</code></pre>
<p>这意味着Python可以看到:</p>
^{pr2}$
<p>因此,<code>optparse.OptionParser</code>只将<em>解析为<code>-p</code>开关的值。结果,<code>options.tgtPort</code>被设置为<code>'21,'</code>,并且该值上的<code>.split(', ')</code>会产生{<cd7>},因为在该输入字符串中有<em>no</em><code>', '</code>(逗号和空格)。在</p>
<p>要在参数中包含空格,请在命令行中使用引号:</p>
<pre><code>python port_scanner.py -H 74.207.244.221 -p "21, 22, 80"
</code></pre>
<p>但您确实需要调整命令行解析,使其在逗号上拆分<em>而不是</em>,而不是容忍空格:</p>
<pre><code>tgtPorts = [p.strip() for p in options.tgtPort.split(',')]
</code></pre>
<p>另一件需要理解的事情是,使用<code>.split()</code>分割字符串将得到一个至少包含一个元素的列表:</p>
<pre><code>>>> 'foo'.split(',')
['foo']
</code></pre>
<p>因此,<code>tgtPorts[0] == None</code>的测试将始终是<code>False</code>。注意,正常的Python习惯用法是使用<code>is</code>代替<code>None</code>,因为<code>None</code>是一个单例。在</p>