save = "/root/foo/"
PERF_PATH="/root/foobar/"
所以,最初我在save
中有变量perf_path
和cmd
。但是现在,我想用它来代替它以增强可读性。
我想创建一个最终将存储变量app[a]
的文件夹。
direc = os.mkdir(save + i + "-"+ j +"-" + k + "-" +l)
创建目录似乎没有问题。 但是将非字符串值变量加入字符串似乎是一个问题。
cmd = "taskset -c %s" + PERF_PATH + "perf2 stat -t %s e r4008387e1 -f -o" +save + direc + "%s.csv &" % (cpus_list[a],fpid[a],apps[a])
pro= subprocess.Popen(cmd,shell=True, stdout=subprocess.PIPE, preexec_fn=os.setsid)
TypeError: cannot concatenate 'str' and 'NoneType' objects
cmd = "taskset -c %s" + str(PERF_PATH) + "perf2 stat -t %s e r4008387e1 -f -o" +str(save) + str(direc) + "%s.csv &" % (cpus_list[a],fpid[a],apps[a])
也没什么帮助。
我能解决这个问题的任何想法吗?
答案 0 :(得分:3)
os.mkdir()
不返回任何内容,因此direc
设置为无。
请改为:
direc = save + i + "-"+ j +"-" + k + "-" +l
os.mkdir(direc)
你真的想使用os.path.join()
和字符串格式来构建路径,它会更容易阅读:
save = "/root/foo"
PERF_PATH="/root/foobar"
direc = os.path.join(save, '-'.join((i, j, k, l)))
os.mkdir(direc)
对于subprocess.Popen()
,传入一个列表而不是命令和参数的字符串,并将shell
保留为默认值False
,不需要shell处理:
cmd = ['taskset',
'-c', cpus_list[a], PERF_PATH, 'perf2', 'stat',
'-t', fpid[a], 'e', 'r4008387e1',
'-f', '-o', save,
os.path.join(direc, "%s.csv" % apps[a])
]
pro = subprocess.Popen(cmd, stdout=subprocess.PIPE, preexec_fn=os.setsid)
答案 1 :(得分:0)
os.mkdir返回None。
尝试将字符串添加到None是否定的。如果要使用不同类型构建字符串,请尝试使用以下格式:
s = 'hi there number {no}'.format(no=81)
这种方式更具可读性,因此可以调试