我想编写一个python程序,它调用ipcs并使用其输出删除共享内存段和信号量。 我有一个可行的解决方案,但我觉得一定有更好的方法来实现这一点。 这是我的计划:
import subprocess
def getid(ip):
ret=''
while (output[ip]==' '):
ip=ip+1
while((output[ip]).isdigit()):
ret=ret+output[ip]
ip=ip+1
return ret
print 'invoking ipcs'
output = subprocess.check_output(['ipcs'])
print output
for i in range (len(output)):
if (output[i]=='m'):
r=getid(i+1)
print r
if (r):
op = subprocess.check_output(['ipcrm','-m',r])
print op
elif (output[i]=='s'):
r=getid(i+1)
print r
if (r):
op = subprocess.check_output(['ipcrm','-s',r])
print op
print 'invoking ipcs'
output = subprocess.check_output(['ipcs'])
print output
特别是,有没有更好的方法来写“getid”?也就是说,不是逐个分析, 我能一个一个字符串地解析它吗?在
输出变量如下(解析前):
^{pr2}$谢谢!在
实际上不需要一次迭代输出一个字符。在
首先,您应该将输出字符串拆分成几行,然后迭代这些行,一次处理一个。这是通过使用字符串的
splitlines
方法实现的(有关详细信息,请参见the docs)。在您可以使用}匹配决定了下一步的操作。在
split()
进一步分割空白行,但是考虑到输出的规则性,regular expression很适合这个要求。基本上,如果第一个字符是m
或s
,那么接下来的数字就是您的id,m
还是{您可以使用名称来标识所标识的字符组,这使得正则表达式的读取更加容易,并且由于
groupdict
而使处理结果更加舒适。在您可以在
ipcs
输出时逐行导入输出。然后我将使用.strip().split()
来解析每一行,并使用类似于try
except
块来确保该行符合您的条件。将它解析为一个字符流会使事情变得更复杂,我不推荐它。。在可以使用stringsplit方法根据字符串中的空格拆分字符串。在
所以你可以利用
相关问题 更多 >
编程相关推荐