linux进程活动,在Linux下用Python获取活动窗口的进程

感谢@AnttiHaapala和@Steampunkery提供的提示。基于它们,我设法将我原来的代码修改成一个答案。在

使用xprop -root我得到window_id:root = Popen( ['xprop', '-root', '_NET_ACTIVE_WINDOW'], stdout = PIPE )

stdout, stderr = root.communicate()

m = re.search( b'^_NET_ACTIVE_WINDOW.* ([\w]+)$', stdout )

window_id = m.group( 1 )

使用window_id,加上xprop -id,我得到窗口名("WM_NAME"):

^{pr2}$

以及进程的名称("WM_CLASS"):processname1, processname2 = None, None

process = Popen( ['xprop', '-id', window_id, 'WM_CLASS'], stdout = PIPE )

stdout, stderr = process.communicate()

pmatch = re.match( b'WM_CLASS\(\w+\) = (?P.+)$', stdout )

processname1, processname2 = pmatch.group( 'name' ).decode( 'UTF-8' ).split( ', ' )

完整的代码和一些错误检查等:import os, re, sys, time

from subprocess import PIPE, Popen

def get_activityname():

root = Popen( ['xprop', '-root', '_NET_ACTIVE_WINDOW'], stdout = PIPE )

stdout, stderr = root.communicate()

m = re.search( b'^_NET_ACTIVE_WINDOW.* ([\w]+)$', stdout )

if m is not None:

window_id = m.group( 1 )

windowname = None

window = Popen( ['xprop', '-id', window_id, 'WM_NAME'], stdout = PIPE )

stdout, stderr = window.communicate()

wmatch = re.match( b'WM_NAME\(\w+\) = (?P.+)$', stdout )

if wmatch is not None:

windowname = wmatch.group( 'name' ).decode( 'UTF-8' ).strip( '"' )

processname1, processname2 = None, None

process = Popen( ['xprop', '-id', window_id, 'WM_CLASS'], stdout = PIPE )

stdout, stderr = process.communicate()

pmatch = re.match( b'WM_CLASS\(\w+\) = (?P.+)$', stdout )

if pmatch is not None:

processname1, processname2 = pmatch.group( 'name' ).decode( 'UTF-8' ).split( ', ' )

processname1 = processname1.strip( '"' )

processname2 = processname2.strip( '"' )

return {

'windowname': windowname,

'processname1': processname1,

'processname2': processname2

}

return {

'windowname': None,

'processname1': None,

'processname2': None

}

if __name__ == '__main__':

a = get_activityname()

print( '''

'windowname': %s,

'processname1': %s,

'processname2': %s

''' % ( a['windowname'], a['processname1'], a['processname2'] ) )

这将返回窗口和控制进程的名称。它甚至可以获取RStudio的进程名,因为某些原因,RStudio没有窗口名("WM_NAME")。在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值