ipcs를 호출하고 출력을 사용하여 공유 메모리 세그먼트 및 세마포를 삭제하는 Python 프로그램을 작성하고 싶습니다. 저는 해결책이 있지만 이것을 수행하는 더 좋은 방법이 있어야한다고 생각합니다. 특히파이썬에서 호출 한 명령의 출력을 처리하는 방법
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"를 작성하는 더 좋은 방법이있다 : 여기 내 프로그램입니다? 즉 문자로 문자를 구문 분석하는 대신 문자열로 문자열을 구문 분석 할 수 있습니까?
이 출력 변수 (구문 분석 전) 모습입니다 :
Message Queues:
T ID KEY MODE OWNER GROUP
Shared Memory:
T ID KEY MODE OWNER GROUP
m 262144 0 --rw-rw-rw- xyz None
m 262145 0 --rw-rw-rw- xyz None
m 262146 0 --rw-rw-rw- xyz None
m 196611 0 --rw-rw-rw- xyz None
m 196612 0 --rw-rw-rw- xyz None
m 262151 0 --rw-rw-rw- xyz None
Semaphores:
T ID KEY MODE OWNER GROUP
s 262144 0 --rw-rw-rw- xyz None
s 262145 0 --rw-rw-rw- xyz None
s 196610 0 --rw-rw-rw- xyz None
감사합니다!
이것은 Linux와 관련이 있으며, SysV ipc가있는 POSIX-ish 시스템에서 작동합니까? 왜냐하면 리눅스는 기계 처리가되는 방식으로이 같은 정보를 얻는 비표준 방식을 가지고 있다고 생각하기 때문입니다. – abarnert
또한'ipcs'를 실행 한 후 타입을 파싱하는 대신에'ipcs -m'과'ipcs -s'를 사용할 수 있습니다. 그러면 헤더 (header) 외에 모든 라인이 적절한 타입임을 알게 될 것입니다. 그래서 당신이 정말로해야 할 일은 qwwqwwq가 ID를 얻기위한 답에서'int (line.split() [1])'입니다. – abarnert