команда tail не дает правильного ответа для подпроцесса. Открыть - PullRequest
0 голосов
/ 02 ноября 2018

При выполнении ниже команды через терминал, он дает правильный вывод, то есть исключая верхние 6 строк, отображая оставшиеся строки data.out.

tail -n +6 data.out

Но когда та же команда обрабатывается через subprocess.Popen, как указано в приведенном ниже коде:

fin = open('data.out')
fout = file('data1.out','w')
line = 6
lineno = "-n +" + str(line)
p2 = subprocess.Popen(["tail",lineno], stdin=fin, stdout=fout)
errcode = p2.wait()
fin.close()
fout.close()

Это сохраняет последние 6 строк data.out в файле data1.out, что неверно. Это сохраняет результат tail -n 6 data.out, а не данных и ожидаемых tail -n +6 data.out

1 Ответ

0 голосов
/ 02 ноября 2018

не смешивать мульти-аргументы со списком аргументов

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)
...