所以我有这个来找出一个进程是否正在运行:
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()