У меня есть файл Window .bat с командами DOS, которые включают REM, MKDIR, ECHO, запускают некоторые программы и особенно объединяют весь вывод в файл журнала с отметками времени.Я хочу перевести это на Python.
Я пробовал os.system, но это не сработает - он запустит программы, которые мне нужны, но нет способа соединить все операторы, убедившись, что все журналы выводятся в нужный файл.Как я понимаю, каждый раз командная строка вызывается отдельно с использованием os.system.
Пример выдержки:
SET LOG=test.log
DEL /F /Q ..\output\
REM THE LOG STARTS HERE
ECHO test.bat started >%LOG%
ECHO %DATE% >>%LOG%
ECHO %TIME% >>%LOG%
stata/e statascript.do
matlab -r matlabscript -logfile matlabscript.log -nosplash -minimize -wait
lyx -e pdf2 document >>%LOG% 2>&1
COPY %LOG%+statascript.log+matlabscript.log %LOG%
ECHO test.bat completed >>%LOG%
ECHO %DATE% >>%LOG%
ECHO %TIME% >>%LOG%
PAUSE
Мой пример кода:
import subprocess, time, sys, os
log = open('test.log', 'w')
p = subprocess.call(r'DEL /F /Q ..\output\\', shell = True)
log.write('test.py started\n')
log.write(time.asctime())
log.write('\n\n\n')
log.flush()
p = subprocess.call(r'%STATAEXE% /e do statacode.do', shell = True, stdout = log)
log.write(open('statacode.log').read())
p = subprocess.Popen('DEL statacode.log', shell = True, stdout = log)
log.write('\n\ntest.py completed\n')
log.write(time.asctime())
log.write('\n')
log.flush()
log.close()
raw_input("Press <Enter> to exit.")
Единственная проблема, которую я оставил: когда я запускаю это в Windows с помощьюдважды щелкнув test.py так же, как я делаю это с test.bat, я получаю это сообщение об ошибке, даже если все шаги завершены в конце:
"Процесс не может получить доступ к файлу, потому что ониспользуется другим процессом "
Есть идеи?