我有一个包含DOS命令(如REM、MKDIR、ECHO)、运行某些程序以及把所有输出合并到带时间戳的日志文件中的Window .bat文件。我想把它翻译成Python。
我尝试过os.system,但它无法达到预期效果——虽然能运行所需程序,但没有办法将所有语句连接起来,确保所有日志都输出到正确的文件中。据我了解,每次调用命令行都会单独使用os.system。
以下是代码片段示例:
我的示例代码:
我遇到的唯一问题是:当我像运行test.bat一样双击test.py在Windows中运行时,即使所有步骤都完成了,在最后我仍然会得到这个错误警告消息:“无法访问该文件,因为其正在被另一个进程使用”。 你有什么想法吗?
我尝试过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.")
我遇到的唯一问题是:当我像运行test.bat一样双击test.py在Windows中运行时,即使所有步骤都完成了,在最后我仍然会得到这个错误警告消息:“无法访问该文件,因为其正在被另一个进程使用”。 你有什么想法吗?