使用Python的subprocess.call来杀死firefox进程

时间:2012-09-21 11:19:29

标签: python linux firefox

我试图使用下面的脚本杀死在我的系统上运行的任何firefox进程,作为python脚本的一部分:

    if subprocess.call( [ "killall -9 firefox-bin" ] ) is not 0:
        self._logger.debug( 'Firefox cleanup - FAILURE!' )
    else:
        self._logger.debug( 'Firefox cleanup - SUCCESS!' )

我遇到如下所示的以​​下错误,但是“killall -9 firefox-bin”无论何时直接在终端中使用都没有任何错误。

       Traceback (most recent call last):
 File "./pythonfile", line 109, in __runMethod
 if subprocess.call( [ "killall -9 firefox-bin" ] ) is not 0:
 File "/usr/lib/python2.6/subprocess.py", line 478, in call
 p = Popen(*popenargs, **kwargs)
 File "/usr/lib/python2.6/subprocess.py", line 639, in __init__
 errread, errwrite)
 File "/usr/lib/python2.6/subprocess.py", line 1228, in _execute_child
 raise child_exception
 OSError: [Errno 2] No such file or directory

我错过了什么或者我是否应该尝试使用不同的python模块?

1 个答案:

答案 0 :(得分:3)

使用subprocess.call时需要分隔参数:

if subprocess.call( [ "killall", "-9", "firefox-bin" ] ) > 0:
    self._logger.debug( 'Firefox cleanup - FAILURE!' )
else:
    self._logger.debug( 'Firefox cleanup - SUCCESS!' )

call()通常不像shell那样对待你的命令,也不会将其解析为单独的参数。有关完整说明,请参阅frequently used arguments

如果您必须依赖命令的s​​hell解析,请将shell关键字参数设置为True

if subprocess.call( "killall -9 firefox-bin", shell=True ) > 0:
    self._logger.debug( 'Firefox cleanup - FAILURE!' )
else:
    self._logger.debug( 'Firefox cleanup - SUCCESS!' )

请注意,我将测试更改为> 0,以便更清楚地了解可能的返回值。由于Python解释器中的实现细节,is测试恰好适用于小整数,但是不是测试整数相等的正确方法。