0

所以我有这个来确定一个进程是否正在运行:

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

我使用方括号,所以我也不会返回 grep 命令。

当我尝试做类似的事情时

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

我总是不会,即使实际上 python 打印带有进程信息的行。

很确定我这边一定有某种误解......我假设如果 os.system 的输出不为零,则表达式解析为真,所以我应该得到“是”。但这根本不会发生,我不明白,即使进程正在运行,并且命令正确返回有关进程的信息。

我在这里做错了什么?

谢谢!

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 上,返回值是系统 shell 在运行命令后返回的值,由 Windows 环境变量 COMSPEC 给出:在 command.com 系统(Windows 95、98 和 ME)上,它始终为 0;在 cmd.exe 系统(Windows NT、2000 和 XP)上,这是命令运行的退出状态;在使用非本地 shell 的系统上,请查阅您的 shell 文档。

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

于 2013-06-03T06:05:24.817 回答
2

os.system returns exit status of the command executed. If the command is successful, it returns 0, or else non-zero number. Example:

>>> 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 回答