重定向到Fi时出现批处理错误

2024-10-01 15:31:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我将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\softeon_project\log\log_%dt%.txt 2>>C:\API_DOC\softeon_project\log\logerr_%dt%.txt 
echo "after python path"
pause
exit

任何帮助都是值得赞赏的。你知道吗


Tags: 文件echotxtproject脚本logapidate
1条回答
网友
1楼 · 发布于 2024-10-01 15:31:01

动态环境变量DATE的使用取决于为当前使用的用户帐户定义的WindowsRegion设置。你知道吗

例如,在同一个窗口中运行时,将Tue 12/26/2017写入命令提示符窗口echo %DATE%可以使用

set "dt=%DATE:~10,4%-%DATE:~4,2%-%DATE:~7,2%"

或者更好

set "dt=%DATE:~-4%-%DATE:~-10,2%-%DATE:~-7,2%"

两个命令行都使用字符串替换来获取用字符串2017-12-26定义的环境变量dt。不同之处在于,第一个命令行从左侧引用日期字符串中的字符,而第二个命令行从右侧引用它们。因此,第二个命令行在开始时也不使用缩写的工作日。你知道吗

在命令提示符窗口中运行set /?时,commandSET的帮助输出解释了此处使用的字符串替换。你知道吗

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%"

这个变体在Why does %date% produce a different result in batch file executed as scheduled task?的答案中有详细的解释

缺点是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命令行中有一个尾随空格,在上面的代码中被删除。查看Why does ECHO command print some extra trailing space into the file?
上的答案 Why is no string output with 'echo %var%' after using 'set var = text' on command line?为什么批处理文件中的尾随空格会导致意外输出到文件中,甚至导致执行批处理文件时的意外行为。你知道吗

并且python用文件扩展名.exe扩展,以避免Windows命令解释器首先找到文件python.batpython.cmd,因为在这种情况下,下一行将不再执行,因为批处理文件必须从批处理文件中调用,而批处理文件必须使用commandCALL返回对批处理文件的调用正在完成所调用批处理文件的执行。你知道吗

另请阅读有关Using command redirection operators的微软文章,了解>>2>>的解释。你知道吗

相关问题 更多 >

    热门问题