не смешивать мульти-аргументы со списком аргументов
lineno = "-n +" + str(line) # wrong: 2 arguments seen as one
p2 = subprocess.Popen(["tail",lineno], stdin=fin, stdout=fout)
у вас есть 2 аргумента, и часть +line
, вероятно, игнорируется tail
. Вместо этого просто передайте один аргумент для каждого элемента списка:
p2 = subprocess.Popen(["tail","-n","+"+str(line)], stdin=fin, stdout=fout)
может быть понятнее, используя format
:
p2 = subprocess.Popen(["tail","-n","+{}".format(line)], stdin=fin, stdout=fout)