<p>如果您要用一个大shell命令来完成这一切,只需将<code>-c</code>参数添加到<a href="http://pubs.opengroup.org/onlinepubs/009604499/utilities/grep.html" rel="noreferrer">^{<cd2>}</a>中,这样它将为您提供行数而不是实际的行数:</p>
<pre><code>$ ps uaxw |grep python |grep -v grep
abarnert 1028 0.0 0.3 2529488 55252 s000 S+ 9:46PM 0:02.80 /Library/Frameworks/Python.framework/Versions/3.4/Resources/Python.app/Contents/MacOS/Python /Library/Frameworks/Python.framework/Versions/3.4/bin/ipython3
abarnert 9639 0.0 0.1 2512928 19228 s002 T 3:06PM 0:00.40 /System/Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python /usr/local/bin/ipython2
$
$ ps uaxw |grep python |grep -c -v grep
2
</code></pre>
<p>当然,您可以通过在末尾添加<code>| wc -l</code>,或者通过计算Python中的行数来使这变得更复杂,但是为什么呢?在</p>
<hr/>
<p>或者,为什么还要涉及到外壳呢?您可以像运行<code>grep</code>一样轻松地在Python中进行搜索,这样就不会出现这样的问题,即您无意中创建了一个<code>grep</code>进程,<code>ps</code>将重复该进程以匹配您的搜索,然后需要<code>grep -v</code>返回:</p>
^{pr2}$
<hr/>
<p>或者,更简单地说,不要要求<code>ps</code>给你一大堆你不想要的信息,然后想办法忽略它,只需要问你想要的信息:</p>
<pre><code>procs = subprocess.check_output(['ps', '-a', '-c', '-ocomm=']).splitlines()
count = procs.count('kms')
</code></pre>
<hr/>
<p>或者,更简单地说,安装<a href="https://pypi.python.org/pypi/psutil" rel="noreferrer">^{<cd9>}</a>,甚至不要尝试运行子进程并解析其输出:</p>
<pre><code>count = sum(1 for proc in psutil.process_iter() if proc.name() == 'kms')
</code></pre>