【问题标题】:Open .bat file with Python - not working用 Python 打开 .bat 文件 - 不工作
【发布时间】:2015-06-23 02:44:43
【问题描述】:

我有 3 个不同的文件,一个 Python 文件和两个 .bat 文件。他们相互交流(希望如此)。

当我自己执行“Process_Videos.bat”时(在 Windows 资源管理器中双击),它工作正常,但每当我从 Python 文件调用它时,它根本不起作用,只是说“按任意按钮继续。 ..”

我真的需要这个结构,从 Python 文件中调用“Process_Videos.bat”,因为我正在提取一些网络信息。 “pythonExecute.bat”只是作为整个过程的触发器。

我也尝试过“子流程”方法,但也不起作用。

文件和相应的代码:

pythonExecute.bat

python "D:\\tests\\pythonCall.py"

pythonCall.py

import os
os.system('D:\\tests\\3.asc\\Process_Videos_asc.bat')

Process_Videos.bat

@echo off

setlocal EnableDelayedExpansion
set "FolderBaseName=TestName"
set "DropBoxFolder=D:\tests\3.asc\myDropBoxFolder"
set "BaseOutputFolder=D:\tests\3.asc\TEMP"

for %%I in (*.png) do (

    set "slaveName=%%~nI"
    set "slaveName=!slaveName:~6!
    set "OutputFolder=%BaseOutputFolder%_!slaveName!"
    echo !slaveName!   
    md "!OutputFolder!" 2>nul

    for %%J in (*.mp4*) do (

        ffmpeg -i "%%~fJ" -i "%%~fI" -filter_complex overlay "!OutputFolder!\%%~nJ.mp4"

    )

    "C:\Program Files\WinRAR\rar.exe" a -cfg- -ep1 -inul -m5 "%DropBoxFolder%\%FolderBaseName%_!slaveName!" "!slaveName:~6!\*"

    rd /S /Q "!OutputFolder!"

)

pause

【问题讨论】:

  • 您的批处理文件的名称是Process_Videos_asc.bat 还是Process_Videos.bat
  • Process_Videos.bat,我已经在本地更正了,仍然是同样的问题
  • 那么这可能是因为当您通过双击 .bat 并通过pythonCall.py 文件调用它时当前工作目录不同 - 这将使for %%I in (*.png) do 找不到任何文件。在Process_Videos.bat 的开头添加一个普通的cd 命令以打印出cwd 运行时的内容(或者更好的是,添加一个以更改到正确的目录)。
  • 在这里看看我的回答:stackoverflow.com/questions/54847871/…希望这会有所帮助

标签: python batch-file


【解决方案1】:

你需要:

a) 在批处理文件所在的目录中调用批处理文件(例如,首先更改目录),并且

b) 消除批处理文件末尾的暂停。

您还应该考虑完全替换批处理文件 - python 可以更简洁地完成所有事情。 this SO 问题的公认答案提供了一些非常好的提示。

【讨论】:

  • “a)”是什么意思?我正在用绝对路径写下所有内容,不确定我是否理解正确。
  • (*.png) 将在当前工作目录的上下文中进行评估,如果您双击批处理文件,它将与存储的目录相同,除非您先更改目录或在子进程上使用工作目录参数,python 将执行它的目录,我怀疑绝对路径中的目录不会相同。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-17
  • 2018-09-07
  • 2011-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多