将Window BAT(批处理)文件转换为Python脚本

时间:2011-11-15 07:28:47

标签: python batch-file dos

我有一个带有DOS命令的Window .bat文件,涉及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执行此操作,即使所有步骤都已完成,我也会收到此错误警告消息端:

“进程无法访问该文件,因为它正由另一个进程使用”

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

您应该使用subprocess模块来调用可执行文件。它允许您指定进程的输入和输出句柄之类的内容,因此您可以将它们指向您想要的位置。