通过批处理文件运行时,如何将python脚本的输出打印到Windows控制台?




我一直在寻找这个来回的答案,但无济于事。我在Windows上工作,用Python编写了一个脚本,将源文件复制到其他备份目的地(Dropbox文件夹和远程驱动器(。

import os, shutil
source = r'C:********Accounts_Passes.kdbx'
file_name = source.split('\')[-1]
cloud_backup = r'C:****DropboxBackup'
pendrive_backup = r'I:'
def backup (source, destination):
if not os.path.exists(destination):
os.mkdir(destination)
shutil.copy(source, destination)

if __name__ == '__main__':
if os.path.exists(pendrive_backup.split('\')[0]):
backup(source, pendrive_backup)
print(f"{file_name} file backed up to pendrive!")
else:
print(f"Pendrive disconnected, couldn't backup {file_name} to it")
backup(source, cloud_backup)
print(f"{file_name} file backed up to Dropbox!")
print("DONE!")

我希望它通过Windows任务计划程序运行它,所以我创建了一个.bat文件。

echo off
echo Backup launched
timeout /t 5
start "C:Program FilesPython38python.exe" "C:*****Backup ScriptsKeypass_backup.py"
pause

问题是当我通过文件运行它时.bat Python 脚本的输出不会显示在我强烈要求的控制台中。关于如何通过批处理文件打开命令行,显示Python脚本的打印输出的任何建议都很棒。

谢谢
话筒

我的建议是更正批处理文件内容。

您应该从您提供的内容的第4行中删除start

@Echo Backup launched
@%__AppDir__%timeout.exe /T 5 /NoBreak
@"%ProgramFiles%Python38python.exe" "C:*****Backup ScriptsKeypass_backup.py".
@Pause

如果您想忽略该建议并以任何方式使用start,那么正确的语法将是:

@Start "" "%ProgramFiles%Python38python.exe" "C:*****Backup ScriptsKeypass_backup.py".

如果没有该语法,您的start命令实际上使用C:Program FilesPython38python.exe作为"窗口标题",并运行命令"C:*****Backup ScriptsKeypass_backup.py",这不是您希望它执行的操作。

如果打开命令提示符窗口,键入start /?help start,然后按Enter,您应该会看到第一组双引号用于定义标题。

此外,您应该能够通过任务计划程序运行"C:Program FilesPython38python.exe",将"C:*****Backup ScriptsKeypass_backup.py"作为参数,而无需批处理文件。您甚至可以通过任务调度程序运行cmd.exe来做到这一点,/K"C:Program FilesPython38python.exe""C:*****Backup ScriptsKeypass_backup.py"作为其参数。

最新更新