2013-02-06 33 views
0
save = "/root/foo/" 
PERF_PATH="/root/foobar/" 

所以,起初我有可变saveperf_pathcmd。但现在,我想用它代替增强的可读性。类型错误:不能连接“海峡”和“NoneType”对象

我想创建一个文件夹,变量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]) 

那是没有多大帮助的。

任何想法如何解决这个问题?

+3

该错误消息告诉你,其中一个变量你”重新尝试添加的是“无”。找出它是哪一个。 –

+0

但是,一旦你通过这个错误,你会得到一个'TypeError:不是在字符串格式化过程中转换的所有参数。问题在于'%'比'+'具有更高的优先级,但是_real_问题是您想要同时将字符串连接和'%'格式混合在一起,这很难正确,甚至是即使你做得对,也很难阅读。只需执行一个或另一个 - 理想的'%'格式化,或者甚至更好的格式化。 – abarnert

回答

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) 
+0

'TypeError:并非在字符串格式化过程中转换的所有参数' 它仍然存在这个问题。这是我似乎不明白的东西。一切都是字符串变量 – pistal

+0

花了我一分钟才明白我的错误! – pistal

+0

模块'os.join'不在那里..我想尝试说'os.path.join' – pistal

0

os.mkdir返回无。

尝试将字符串添加到None是否否。如果你想建立一个串出不同类型的尝试使用格式:

s = 'hi there number {no}'.format(no=81) 

这种方式是更可读,从而可调试的,反正

相关问题