Пакетный файл, как это должно сделать свое дело.
start_prog.cmd
CALL :Start_Prog arg1 arg2
GOTO :EOF
:Start_Prog
something.py %1 %2 2>&1 1>nul | "C:\Python26\python.exe" format_output.py %1 %2 >>log.txt
GOTO :EOF
Здесь я передаю stderr через канал и передаю аргументы в качестве аргументов. Затем вывод добавляется в файл log.txt.
Выбросить стандартный вывод
1>nul
Перенаправить stderr на стандартный вывод
2>&1
Передача stderr в скрипт для форматирования вывода и передачи аргументов в качестве аргументов.
| "C:\Python26\python.exe" format_output.py %1 %2
Добавить вывод к "log.txt" .
>>log.txt
В моей системе мне нужно вызвать python.exe, иначе канал не работает.
Вот два файла, которые я использовал "thing.py " и " format_output.py ".
something.py
import sys
print >>sys.stdout, " ".join(sys.argv[1:])
print >>sys.stderr, "java.io.exception etc..."
format_output.py
import sys
print "Batch file called with parameters:"
for arg in sys.argv[1:]:
print '- "{0}"'.format(arg)
print "Exception:"
for line in sys.stdin:
print line
И, наконец, вот вывод.
log.txt
Batch file called with parameters:
- "arg1"
- "arg2"
Exception:
java.io.exception etc...
Единственное, чего не хватает, так это того, что что-то всегда записывается в файл "log.txt" .
Чтобы привести это в порядок, я бы переместил запись файла журнала в "format_output.py" .
Затем вы можете добавить проверку, чтобы проверить, является ли stderr из вашей программы пустым.