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

问题描述


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

import os, shutil

source = r'C:\****\****\Accounts_Passes.kdbx'
file_name = source.split('\\')[-1]
cloud_backup = r'C:\****\Dropbox\Backup'
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 Files\Python38\python.exe" "C:\*****\Backup Scripts\Keypass_backup.py"
pause

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

谢谢,
迈克

标签: pythonwindowsbatch-fileautomation

解决方案


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

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

@Echo Backup launched
@%__AppDir__%timeout.exe /T 5 /NoBreak
@"%ProgramFiles%\Python38\python.exe" "C:\*****\Backup Scripts\Keypass_backup.py".
@Pause

如果您想忽略该建议并start无论如何使用,那么正确的语法应该是:

@Start "" "%ProgramFiles%\Python38\python.exe" "C:\*****\Backup Scripts\Keypass_backup.py".

如果没有该语法,您的start命令实际上是C:\Program Files\Python38\python.exe用作“窗口标题”,并运行命令 , "C:\*****\Backup Scripts\Keypass_backup.py",这不是您想要的。

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

此外,您应该能够"C:\Program Files\Python38\python.exe"通过任务调度程序运行,"C:\*****\Backup Scripts\Keypass_backup.py"作为参数,根本不需要。您甚至可以cmd.exe通过任务调度程序运行,使用/K,"C:\Program Files\Python38\python.exe""C:\*****\Backup Scripts\Keypass_backup.py"作为它的参数来做到这一点。


推荐阅读