Python: os的输出.系统不考虑进行真/假检查



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

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

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

虽然当我尝试做像

这样的事情时
'yes' if os.system("ps aux | grep [my]process") else 'no'

我总是得到no,即使实际上python打印了包含进程信息的行。

很确定我这边一定有什么误会…我假设如果os的输出。system不为零,表达式解析为true,所以我应该得到'yes'。但这根本不会发生,我得到no,即使进程正在运行,并且命令正确返回有关该进程的信息。

我在这里做错了什么?

谢谢!

你把逻辑弄反了。

存在匹配行时,grep返回0

使用subprocess模块是一个更好的主意。您可以获得ps aux的输出并在程序中检查它。尽管解析ps的输出总是相当脆弱

,

import subprocess
'yes' if 'myprocess' in subprocess.check_output(['ps','aux']) else 'no'

os.system的输出不是屏幕上打印的。

在Unix上,返回值是编码的进程的退出状态为wait()指定的格式。请注意,POSIX没有指定C系统()函数的返回值的含义,所以返回Python函数的值与系统有关。

在Windows上,返回值是系统shell返回的值运行命令后,由Windows环境变量给出COMSPEC:在command.com系统(Windows 95、98和ME)上,这总是0;在cmd.exe系统(Windows NT、2000和XP)上,这是出口命令运行状态;在使用非本机shell的系统上,查阅您的shell documentation.ù

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

系统返回已执行命令的退出状态。如果命令成功执行,则返回0,否则返回非零数字。例子:

>>> t=os.system("ls")
>>> t
0
>>> t=os.system("lsas")
sh: 1: lsas: not found
>>> t
32512
>>> 

使用subprocess.call()subprocess.check_call()

最新更新