Python 重定向到文件时发生批处理错误
我正在将Python脚本的输出重定向到一个文件。 如果没有错误,它可以正常工作。 但是,如果有任何错误,我希望在另一个文件中捕获该错误,而该文件现在没有发生 下面是我写的剧本Python 重定向到文件时发生批处理错误,python,batch-file,error-handling,Python,Batch File,Error Handling,我正在将Python脚本的输出重定向到一个文件。 如果没有错误,它可以正常工作。 但是,如果有任何错误,我希望在另一个文件中捕获该错误,而该文件现在没有发生 下面是我写的剧本 @echo off mode con cp select=65001 set dt=%Date:~10,4%-%Date:~4,2%-%Date:~7,2% cd C:\API_DOC\softeon_project\script python -u softeon_main.py >>C:\API_DOC\
@echo off
mode con cp select=65001
set dt=%Date:~10,4%-%Date:~4,2%-%Date:~7,2%
cd C:\API_DOC\softeon_project\script
python -u softeon_main.py >>C:\API_DOC\softeon_project\log\log_%dt%.txt 2>>C:\API_DOC\softeon_project\log\logerr_%dt%.txt
echo "after python path"
pause
exit
任何帮助都是值得的。动态环境变量
日期的使用取决于为当前使用的用户帐户定义的Windows区域设置
例如,在2017年12月26日星期二运行时,将echo%DATE%
写入命令提示窗口,可以使用
set "dt=%DATE:~10,4%-%DATE:~4,2%-%DATE:~7,2%"
或者更好
set "dt=%DATE:~-4%-%DATE:~-10,2%-%DATE:~-7,2%"
这两个命令行都使用字符串替换来获取使用字符串定义的环境变量dt
。不同之处在于,第一个命令行从左侧引用日期字符串中的字符,而第二个命令行从右侧引用它们。因此,第二个命令行在开始时也不使用缩写的工作日
在命令提示符窗口中运行SET/?
时,命令SET的帮助输出解释了此处使用的字符串替换
以yyyy-MM-dd
格式获取当前本地日期的独立于区域的解决方案是:
for /F "tokens=2 delims==." %%I in ('%SystemRoot%\System32\wbem\wmic.exe OS GET LocalDateTime /VALUE') do set "dt=%%I"
set "dt=%dt:~0,4%-%dt:~4,2%-%dt:~6,2%"
有关此变体的详细说明,请参见
缺点是WMIC输出本地日期和时间需要一秒钟以上,这使得此解决方案比使用动态环境变量date
的解决方案慢得多
我建议使用:
@echo off
rem Define encoding UTF-8 for console.
%SystemRoot%\System32\mode.com CON CP SELECT=65001
rem Get current local date in format yyyy-MM-dd.
set "dt=%DATE:~-4%-%DATE:~-10,2%-%DATE:~-7,2%"
rem Change the current directory independent on current drive.
cd /D C:\API_DOC\softeon_project\script
rem Execute Python interpreter and redirect standard output messages
rem to file log_%dt%.txt and error messages to logerr_%dt%.txt.
python.exe -u softeon_main.py >>C:\API_DOC\softeon_project\log\log_%dt%.txt 2>>C:\API_DOC\softeon_project\log\logerr_%dt%.txt
echo "After python path"
pause
Python命令行中有一个尾随空格,在上面的代码中删除了该空格。请参见和上的答案
为什么批处理文件中的尾随空格会导致意外输出到文件中,甚至导致批处理文件执行时出现意外行为
而python
扩展了文件扩展名.exe
,以避免Windows命令解释器首先找到文件python.bat
或python.cmd
,因为在这种情况下,下一行将不再执行,因为批处理文件必须通过命令从批处理文件中调用调用在执行完被调用的批处理文件后返回调用批处理文件
另请阅读Microsoft关于的文章,以了解
和2>
python test.py>log.log 2>err.log
在ubuntu上对我有效的解释。也许它在windows上不起作用?我在windows上试过,它起作用了。也许您应该首先运行代码而不进行输出重定向,并检查是否显示任何错误。@Sraw:是的,它在windows 10上不起作用。我有所有正确的文件夹结构。@eiram_mahera:没有,没有重定向,它工作正常。甚至输出也被捕获。但如果出现错误,则不会出现问题。问题似乎出在日志%dt%.txt中,日期变量导致了问题。如何使用当前日期创建文件并将其作为变量传递非常感谢您的回答。非常不言自明。