Итак, во-первых, вам нужно добавить метки к вашему документу (что, тем не менее, хорошо):
Далее запустите латекс, как всегда, допустим, он называется [112709]walla.tex[112710]. Теперь вы запускаете этот маленький питоновый скрипт:
Вызовите его [112711]find_tex_labels[112712], сделайте его исполняемым, и запустите его как [112713]find_tex_labels walla > walla_annotated.tex[112714] (обратите внимание, в аргументах нет расширений).
На выходе у вас будет аннотированный LaTeX-файл:
(1) Я обещаю доработать его много раз. Затем, учитывая, что я единственный, кто его использует, я исправляю ошибки, если и когда они появляются... и никогда не нахожу времени, чтобы их почистить. [112428]
В итоге я взломал эту штуку вместе:
import subprocess
import time
import sys
log = open(sys.argv[3], 'w')
input = open(sys.argv[2], 'r')
p = subprocess.Popen([sys.argv[1]], stdin=subprocess.PIPE, stdout=subprocess.PIPE)
def readAllSoFar(proc, retVal=''):
while (subprocess.select.select([proc.stdout],[],[],0)[0]!=[]):
retVal+=proc.stdout.read(1)
return retVal
while True:
print('starting loop')
line = input.readline()
print('read line ' + line)
if not line:
print('breaking')
break
print('before sleep1')
time.sleep(0.1)
print('before readAllSoFar')
output = readAllSoFar(p)
print('got output' + output)
log.write(output)
time.sleep(0.1)
log.write(line)
p.stdin.write(line)
Запустите его с python runner.py ./program_to_run input.txt output.txt
Предполагается, что вывод команды будет производиться за десятые доли секунды.
У вас уже есть журнал stdin: это ваш файл.
В противном случае (не уверена, если это то, что вы пытаетесь выполнить), если вы предпочитаете, если вы хотите, чтобы лог, содержащий как stdin, так и stdout, вы можете изменить вашу программу для отправки строк из stdin на stdout, как они читать, прежде чем они обрабатываются.
Комбинация клавиш yd
затянет текущий путь к каталогу в буфер обмена. Это сопоставление клавиатуры определяется в файле .vimrc
по умолчанию, включенном в пакет vifm. Необходимо установить xclip
, в противном случае предварительно определенное сопоставление не будет работать.
Работает для меня с GNU sed (версия 4,2,1):
$ echo -ne $'\u9991' | sed 's/\xe9\xa6\x91//g' | hexdump -C
$ echo -ne $'\u9991' | hexdump -C
00000000 e9 a6 91
(В качестве еще одной замены sed
можно также использовать GNU awk
; но это не кажется нужным.)
Это, вероятно, не самое красивое решение, но вы можете сделать что-то вроде:
cat file.txt | tee -a stdin.txt | ./program | tee -a stdout.txt
Вы можете использовать один и тот же файл в обоих тройниках, но ваши входные и выходные данные могут быть искажены и нечитаемы.