所以我已经知道了进程是否正在运行:
os.system("ps aux | grep [my]process")
我使用方括号,所以我也没有得到grep命令。
当我尝试做类似
的事情时'yes' if os.system("ps aux | grep [my]process") else 'no'
我总是得不到,即使实际上python打印了包含该过程信息的行。
非常肯定我的方面肯定存在某种误解......我假设如果os.system的输出不为零,则表达式解析为true,所以我应该得到'yes'。但这根本不会发生,我得不到,即使进程正在运行,命令也会正确返回有关进程的信息。
我在这里做错了什么?
谢谢!
答案 0 :(得分:5)
你的逻辑是错误的。当有一些匹配的行时,grep
会返回0
使用subprocess
模块是个更好的主意。您可以获得ps aux
的输出并在程序中检查它。虽然解析ps的输出总是相当脆弱
例如:
import subprocess
'yes' if 'myprocess' in subprocess.check_output(['ps','aux']) else 'no'
答案 1 :(得分: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文档。
答案 2 :(得分:1)
使用subprocess.call()
或subprocess.check_call()
答案 3 :(得分:0)
os.system返回已执行命令的退出状态。如果命令成功,则返回0,否则返回非零数字。例如:
>>> t=os.system("ls")
>>> t
0
>>> t=os.system("lsas")
sh: 1: lsas: not found
>>> t
32512
>>>