【发布时间】:2010-06-27 07:31:25
【问题描述】:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
########## THIS NOW WORKS! ##########
UNSUITABLE_ENVIRONMENT_ERROR = \
"This program requires at least Python 2.6 and Linux"
import sys
import struct
import os
from array import array
# +++ Check environment
try:
import platform # Introduced in Python 2.3
except ImportError:
print >>sys.stderr, UNSUITABLE_ENVIRONMENT_ERROR
if platform.system() != "Linux":
print >>sys.stderr, UNSUITABLE_ENVIRONMENT_ERROR
if platform.python_version_tuple()[:2] < (2, 6):
print >>sys.stderr, UNSUITABLE_ENVIRONMENT_ERROR
# --- Check environment
HDIO_GETGEO = 0x301 # Linux
import fcntl
def get_disk_geometry(fd):
geometry = array('c',"XXXXXXXX")
fcntl.ioctl(fd, HDIO_GETGEO, geometry, True)
heads, sectors, cylinders, start = \
struct.unpack("BBHL",geometry.tostring())
return { 'heads' : heads, 'cylinders': cylinders, 'sectors': sectors, "start": start }
from pprint import pprint
fd=os.open("/dev/sdb", os.O_RDWR)
pprint(get_disk_geometry(fd))
【问题讨论】:
-
是的,为什么这段代码不工作,一个工作的例子会膨胀:D
-
TypeError: ioctl 需要文件或文件描述符、整数和可选的整数或缓冲区参数未捕获的异常。进入事后调试运行 'cont' 或 'step' 将重新启动程序 > /home/rob/ricedisk(25)get_disk_geometry() -> fcntl.ioctl(fd, HDIO_GETGEO, geometry, True) (Pdb) p HDIO_GETGEO 769 ( pdb) p type(HDIO_GETGEO)
(Pdb) p type(fd) -
把它放在你的问题中
-
或者告诉我把 /dev/sdb 放到 /sys/firmware/edd 下的正确位置也可以。