希望有人可以帮助我。这似乎是一个非常简单的问题,我无法找到答案。我正在尝试创建一个临时文件,然后使用相同的临时文件,我想使用dd命令写入它。然后打开相同的文件并计算读取文件所需的时间。
我不知道为什么,但这是我得到的错误。 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:
谢谢!
答案 0 :(得分:1)
您尝试在名称中打开文件类型的文件,基本上您尝试的是open(file, 'rb')
而不是open(filename, 'rb')
。尝试:
with open(tf.name, 'rb') as read_file: