Python 出于某种原因,我的函数返回;没有;?为什么?
为什么grepcut()不返回任何值Python 出于某种原因,我的函数返回;没有;?为什么?,python,python-3.x,function,Python,Python 3.x,Function,为什么grepcut()不返回任何值 from termcolor import colored from subprocess import * def grepcut(inputRaw, grep, delimit, field): for line in inputRaw: if grep in line: output = line.split(delimit)[field] return output
from termcolor import colored
from subprocess import *
def grepcut(inputRaw, grep, delimit, field):
for line in inputRaw:
if grep in line:
output = line.split(delimit)[field]
return output
else:
return None
def function():
print(colored("[+] ", "green") + "Here we go!")
inputRaw = Popen(["cat outputfile"], shell=True, stdout=PIPE, universal_newlines=True).communicate()[0].rstrip()
var1 = grepcut(inputRaw, grep = 'grep this', field = 6, delimit = " ")
var2 = grepcut(inputRaw, grep = 'grep this', field = 2, delimit = " ")
print("\n")
print(var1, var2)
#if var1 or var2 is None:
# print(colored("[-] ", "red") + "Not found!!!")
#else:
# print(var1, var2)
function()
顺便说一下,这是inputRaw的内容:
A B C D E F GH I J grep此K L M N
O P Q R S T U 此代码的输出为:
None None您的
grepcut
只检查第一行:如果匹配,则返回output
,否则立即返回None
,而不进行下一次迭代
您可能希望删除该else
分支,并将返回None
移动到for
之后
def grepcut(inputRaw, grep, delimit, field):
for line in inputRaw:
if grep in line:
output = line.split(delimit)[field]
return output
return None
您甚至可以省略返回None
,因为在Python中,任何终止时没有显式返回的函数都会返回None
,不过我会保留它,以明确这不是疏忽,但如果没有找到任何内容,则该函数将返回None
另外,您正在通过Popen
调用communicate()
,因此您得到的是字符串,而不是文件对象;因此,您不能像那样直接对其行进行迭代-对字符串进行迭代会对其字符进行迭代
如果inputRaw
确实是一个字符串,则必须在换行符上拆分,如下所示:
def grepcut(inputRaw, grep, delimit, field):
for line in inputRaw.split('\n'):
if grep in line:
output = line.split(delimit)[field]
return output
return None
仍然返回None。我不知道如何修复这个代码,我迷路了。@DonJhoe:我想重现这个问题,但是你的代码被破坏了。您缺少导入,并且在Popen
行的末尾有一个额外的括号。发布实际的代码,否则我们哪儿也不去。@DonJhoe:我们开始了,填空,我想我发现了另一个错误。F5现在。我修复了丢失的零件。别忘了创建一个名为outputfile的文件,并更改其内容,使其与我的帖子相匹配。