我试图使用下面的脚本杀死在我的系统上运行的任何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模块?
答案 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。
如果您必须依赖命令的shell解析,请将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
测试恰好适用于小整数,但是不是测试整数相等的正确方法。