这个描述可能有点复杂,所以我会尽量简短。你知道吗
我有以下代码,是正常工作。。。你知道吗
def singlelist():
from datetime import datetime
from subprocess import Popen
from subprocess import PIPE
output=Popen(["sar","-r"], stdout=PIPE).communicate()[0]
date=datetime.now()
date=str(date).split()[0]
listtimeval=[]
for line in output.split('\n'):
if line == '' or 'Average' in line or 'kb' in line or 'Linux' in line or 'RESTART' in line:
pass
else:
(time,ampm,field1,field2,field3,field4,field5,field6,field7) = line.split()
listtimeval.append((time + " "+ ampm + "," + field3).split(','))
updatelist= [ [str(date) + " " +x[0],x[1]] for x in listtimeval]
return updatelist
val=singlelist()
…请注意,时间、ampm等之前是如何定义的。。。你知道吗
我试图使这个更具动态性,因为sar的输出并不总是具有相同的列数。你知道吗
我想做的是。。。你知道吗
def fields(method):
if method == '-r':
nf = (time,ampm,field1,field2,field3,field4,field5,field6,field7)
return nf
def singlelist(nf):
from datetime import datetime
from subprocess import Popen
from subprocess import PIPE
output=Popen(["sar","-r"], stdout=PIPE).communicate()[0]
date=datetime.now()
date=str(date).split()[0]
listtimeval=[]
for line in output.split('\n'):
if line == '' or 'Average' in line or 'kb' in line or 'Linux' in line or 'RESTART' in line:
pass
else:
nf = line.split()
listtimeval.append((time + " "+ ampm + "," + field3).split(','))
updatelist= [ [str(date) + " " +x[0],x[1]] for x in listtimeval]
return updatelist
method='-r'
nf=fields(method)
val=singlelist(nf)
但是我得到这个。。。你知道吗
Traceback (most recent call last):
File "./Logic.py", line 110, in <module>
nf=fields(method)
File "./Logic.py", line 58, in fields
nf = (time,ampm,field1,field2,field3,field4,field5,field6,field7)
NameError: global name 'time' is not defined
我怎样才能做到这一点?你知道吗
接着是Pierre的回答:你可以赋值给一个未声明的变量(隐式地创建它),你不能从中赋值而不得到一个未定义的变量错误。你知道吗
您似乎还让这个糟糕的函数做了很多不相关的事情——加载模块、调用子流程、解析和重新分析数据。如果按以下方式分解,可能更容易理解和维护:
现在您可以很容易地定义函数,如下所示:
注意:我是在Windows7机器上写的,所以我没有sar,也不能实际运行测试它-它没有语法错误,我认为它应该正常工作,但可能需要稍微调整。你知道吗
fields
函数中定义time
。好吧,在那个函数中没有(time,ampm,field1,field2,field3,field4,field5,field6,field7)
被定义。。。你知道吗singlelist
中使用nf
,除了重新分配它。你想达到什么目的?你知道吗fields
以接受参数(time,ampm,field1,field2,field3,field4,field5,field6,field7)
以及method
参数,但是您将如何定义它们?您仍然需要从singlelist
调用fields
。你知道吗相关问题 更多 >
编程相关推荐