2012-01-15 9 views
2

最近python3を使い始めましたが、python2.6から多くの変更が加えられました。私は、fdiskを使って、Linuxシステムで使用可能なハードディスクの表示をフォーマットする方法があることを知りたいのですか? python2.6では、このように動作しました。python3.xを使ってLinuxでパーティションを表示

def parse_fdisk(fdisk_output): 
    result = {} 
    for line in fdisk_output.split("\n"): 
     if not line.startswith("/"): continue 
     parts = line.split() 

     inf = {} 
     if parts[1] == "*": 
      inf['bootable'] = True 
      del parts[1] 

     else: 
      inf['bootable'] = False 

     inf['start'] = int(parts[1]) 
     inf['end'] = int(parts[2]) 
     inf['blocks'] = int(parts[3].rstrip("+")) 
     inf['partition_id'] = int(parts[4], 16) 
     inf['partition_id_string'] = " ".join(parts[5:]) 

     result[parts[0]] = inf 
    return result 

def main(): 
    fdisk_output = commands.getoutput("fdisk -l") 
    for disk, info in parse_fdisk(fdisk_output).items(): 
     print disk, " ".join(["%s=%r" % i for i in info.items()]) 
+0

問題の実際の説明が役に立ちました。 –

答えて

3

commandsモジュールがPython3から削除されました。代わりにsubprocessモジュールを使用することができます。

import subprocess 
import shlex 
import sys 

def parse_fdisk(fdisk_output): 
    result = {} 
    for line in fdisk_output.split("\n"): 
     if not line.startswith("/"): continue 
     parts = line.split() 

     inf = {} 
     if parts[1] == "*": 
      inf['bootable'] = True 
      del parts[1] 

     else: 
      inf['bootable'] = False 

     inf['start'] = int(parts[1]) 
     inf['end'] = int(parts[2]) 
     inf['blocks'] = int(parts[3].rstrip("+")) 
     inf['partition_id'] = int(parts[4], 16) 
     inf['partition_id_string'] = " ".join(parts[5:]) 

     result[parts[0]] = inf 
    return result 

def main(): 
    proc = subprocess.Popen(shlex.split("fdisk -l"), 
          stdout = subprocess.PIPE, stderr = subprocess.PIPE) 
    fdisk_output, fdisk_error = proc.communicate() 
    fdisk_output = fdisk_output.decode(sys.stdout.encoding) 
    for disk, info in parse_fdisk(fdisk_output).items(): 
     print(disk, " ".join(["%s=%r" % i for i in info.items()])) 

main() 

全く変化がparse_fdisk関数に行われませんでした。 変更する必要があったのは、commands.getoutputへのコールがmain()にあることでした。

+0

+1。私は2.xに 'commands'モジュールがあることを知りませんでした。 –

+0

それは動作します!ありがとう! – jazy1992

4

psutilパッケージをご覧ください。

psutilは、次のようなコマンドラインツールが提供する多くの機能を実装し、パイソンを使用して、移植可能な方法で実行中のすべてのプロセスとシステム使用率(CPU、ディスク、メモリ)の情報を取得するためのインタフェースを提供するモジュールである:PS 、top、df、kill、free、lsof、netstat、ifconfig、nice、ionice、iostat、iotop、稼働時間、tty。そのREADMEから

それが現在LinuxのWindowsのOSXFreeBSDのをサポートし、両方の 32ビット64ビット Pythonのバージョンとから2.4から3.3 を使用して単一のコードベース。

ディスク例:

>>> psutil.disk_partitions() 
[partition(device='/dev/sda1', mountpoint='/', fstype='ext4'), 
partition(device='/dev/sda2', mountpoint='/home', fstype='ext4')] 
>>> 
>>> psutil.disk_usage('/') 
usage(total=21378641920, used=4809781248, free=15482871808, percent=22.5) 
>>> 
>>> psutil.disk_io_counters() 
iostat(read_count=719566, write_count=1082197, read_bytes=18626220032, 
     write_bytes=24081764352, read_time=5023392, write_time=63199568) 

パーティションの詳細(例えば、ブート可能フラグは)私の知る限り、(まだ)サポートされていません。

+0

これは非常に素晴らしいモジュールです。しかし、とにかく私はパーティションの詳細をつかむことができますか?私はハードディスク名とは別にハードディスクのパーティションIDを確認する必要があります。 – jazy1992

関連する問題