1

以下のスクリプトを使用して、システムで実行されているすべての 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 モジュールを完全に使用しようとする必要がありますか?

4

1 に答える 1

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キーワード引数を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可能な戻り値についてより明確にするためにテストを変更したことに注意してください。このisテストは、Python インタープリターの実装の詳細により、たまたま小さい整数に対して機能しますが、整数の等価性をテストする正しい方法ではありません。

于 2012-09-21T11:20:52.040 に答える