0

だから私はプロセスが実行されているかどうかを調べるためにこれを持っています:

os.system("ps aux | grep [my]process")

角かっこを使用するので、grep コマンドも返されません。

また、次のようなことをしようとすると

'yes' if os.system("ps aux | grep [my]process") else 'no'

実際にpythonがプロセスの情報を含む行を出力したとしても、私はいつもノーになります。

私の側から何らかの誤解があるに違いないことはかなり確かです... os.system の出力がゼロでない場合、式は true で解決されるので、「はい」を取得する必要があると思います。しかし、これはまったく起こりません。プロセスが実行されていても、コマンドはプロセスに関する情報を正しく返します。

ここで何が間違っていますか?

ありがとう!

4

4 に答える 4

5

あなたは間違った方法でロジックを持っています。一致する行がいくつかある場合にgrep返されます0

とにかく、モジュールを使用subprocessする方が良い考えです。の出力を取得しps auxて、プログラムで調べることができます。ps の出力の解析は常にかなり脆弱になりますが

例えば:

import subprocess
'yes' if 'myprocess' in subprocess.check_output(['ps','aux']) else 'no'
于 2013-06-03T06:06:06.050 に答える
3

の出力はos.system、画面に表示されるものではありません。

Unix では、戻り値は、wait() に指定された形式でエンコードされたプロセスの終了ステータスです。POSIX は C の system() 関数の戻り値の意味を規定していないため、Python 関数の戻り値はシステムに依存することに注意してください。

Windows では、戻り値はコマンドの実行後にシステム シェルによって返される値であり、Windows 環境変数 COMSPEC によって指定されます。command.com システム (Windows 95、98、および ME) では、これは常に 0 です。cmd.exe システム (Windows NT、2000、および XP) では、これはコマンド実行の終了ステータスです。非ネイティブ シェルを使用しているシステムでは、シェルのドキュメントを参照してください。

http://docs.python.org/2/library/os.html#os.system

于 2013-06-03T06:05:24.817 に答える
2

os.system は、実行されたコマンドの終了ステータスを返します。コマンドが成功した場合は 0 を返し、そうでない場合はゼロ以外の数値を返します。例:

>>> t=os.system("ls")
>>> t
0
>>> t=os.system("lsas")
sh: 1: lsas: not found
>>> t
32512
>>> 
于 2013-06-03T06:10:03.997 に答える
1

subprocess.call()または_subprocess.check_call()

于 2013-06-03T06:05:10.450 に答える