2012-02-12 3 views
2

누구나 grub2의 grub.cfg 파일에 대한 파이썬 파서를 알고 있습니까?python grub.cfg 파서가 있습니까?

기기 파티션 (루트)별로 "메뉴 항목"을 가져 오려고합니다.

hd0,msdos1: ['Ubuntu, with Linux 3.0.0-15-generic', 
      'Ubuntu, with Linux 3.0.0-15-generic (recovery mode)', 
      'Ubuntu, with Linux 3.0.0-14-generic'] 
hd2,msdos1: ["Windows 7 (on /dev/sdc1)"] 

해결책 :

re.findall("menuentry ['\"](.*?)['\"].*?set root='(.*?)'", x, re.S) 

[('리눅스 우분투 3.0.0-15 제네릭', '(HD0, msdos1)') ('Ubuntu, 리눅스 3.0.0-14- 일반 (복구 모드)', (리눅스 3.0.0-14- 일반 ','(hd0, msdos1)로 'Ubuntu, 리눅스 3.0.0-15와 함께 -'(hd0, msdos1) '),'우분투,리눅스 3.0.0-14- 일반 (복구 모드) ','(hd0, msdos1) '), (Ubuntu, Linux 3.0.0-13- 일반, '(hd0, msdos1)'), 'Ubuntu,리눅스 3.0.0-13- 일반 (복구 모드)', '(hd0, msdos1) '), (Ubuntu, Linux 3.0.0-12- 일반', '(hd0, msdos1)'), 'Ubuntu,Linux 3.0.0-12- 일반 (복구 모드)', (hd0, msdos1) '), ('메모리 테스트 (memtest86 +) ','(hd0, msdos1) '), ('메모리 테스트 (memtest86 +, 시리얼 콘솔 115200) ', ('는/dev/sdc1에서의 Windows 7 ()', '(HD2, msdos1)')]

+0

오, 당신은 사람들이 당신을 위해 모든 일을하기를 원합니다. 그냥 파서를 만드십시오, 당신은 많은 즐거움을 가질 것입니다! –

+0

아니요, 제가 있는지 묻는 중입니다. 어쨌든, regex와 re.S (DOTALL)를 사용하여 대안을 찾았습니다. –

답변

1

나는 grub.cfg를위한 파이썬 파서 잘 모르는 것 같아요,하지만 당신은 할 필요가 없습니다 해당 정보에 대한 전체 파일을 구문 분석하십시오.

menuentry "<name>" [options] { 
    ... 
    set root='<root>' 
    ... 
} 

그래서, menuentry로 시작하는 라인을 찾아 그 줄에서 이름을 구문 분석하고 set root=에 대한 }에 다음 줄 때까지 스캔이 당신이 찾고있는 데이터의 형식입니다.

관련 문제