读写tempfile

时间:2015-07-02 20:35:56

标签: python file-io temporary-files

希望有人可以帮助我。这似乎是一个非常简单的问题,我无法找到答案。我正在尝试创建一个临时文件,然后使用相同的临时文件,我想使用dd命令写入它。然后打开相同的文件并计算读取文件所需的时间。

  • 所以基本上:
    1. 创建临时文件
    2. 然后,dd if = / dev / zero of = tempfile
    3. 最后,计算打开和读取tempfile需要多长时间

我不知道为什么,但这是我得到的错误。 TypeError:强制转换为Unicode:需要字符串或缓冲区,找到实例。我想这是因为我同时打开了同一个文件,但不确定。有什么想法吗?

以下是代码:

import time
import tempfile
import subprocess
import argparse

def readfile(size, block_size, path):
    with tempfile.NamedTemporaryFile(prefix='iospeeds-', dir=path, delete=True) as tf: 

        cmd = ['dd', 'if=/dev/zero', 'of={}'.format(tf), 'bs={}'.format(block_size), 'count={}'.format(size/block_size)]
        subprocess.call(cmd, stderr=subprocess.STDOUT)

        start_time = time.time()
        with open(tf, 'rb') as read_file:
            end_time = time.time()
        total_time = start_time - end_time



    print total_time
    return total_time

def parse_args():
    parser = argparse.ArgumentParser()
    parser.add_argument('--size', type=int, default=1048576)
    parser.add_argument('--block-size', type=int, default=4096)
    parser.add_argument('--path', default='./')
    return parser.parse_args()

def main():
    args=parse_args()
    size = args.size
    block_size = args.block_size 
    path = args.path
    readfile(size, block_size, path)

if __name__ == "__main__":
    main()

这是追溯:

Traceback (most recent call last):
  File "./rd.py", line 38, in <module>
    main()
  File "./rd.py", line 35, in main
    readfile(size, block_size, path)
  File "./rd.py", line 14, in readfile
    with open(tf, 'rb') as read_file: 

谢谢!

1 个答案:

答案 0 :(得分:1)

您尝试在名称中打开文件类型的文件,基本上您尝试的是open(file, 'rb')而不是open(filename, 'rb')。尝试:

with open(tf.name, 'rb') as read_file: