簡體   English   中英

將批處理命令轉換為python

[英]Convert batch command to python

我正在嘗試將 .bat 文件轉換為 python,幾乎一切正常,只有壓縮部分不起作用,我指出了“rar.exe”的標志和路徑,但它在蟒蛇版本。 我需要糾正什么才能擁有與“.bat”版本相同的行為?

謝謝

bat版本.bat

@echo off

setlocal EnableDelayedExpansion
set "FolderBaseName=myFolder"

set "DropBoxFolder=D:\Tests\3.asc\MyDropBox"
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

蟒蛇版本.py

def processVideos():

    FolderBaseName   = "myFolder"
    DropBoxFolder    = "D:\\Tests\\3.asc\\MyDropBox"
    BaseOutputFolder = "D:\\Tests\\3.asc\\TEMP"

    for img in os.listdir("D:\\Tests\\3.asc"):
        if img.endswith(".png"):

            slaveName = img.split('.')[0]

            OutputFolder = BaseOutputFolder+'_'+slaveName + '\\'

            #create tmp folder
            if not os.path.exists(OutputFolder): os.makedirs(OutputFolder)

            for video in os.listdir("D:\\Tests\\3.asc"):
                if video.endswith(".mp4"):

                    command = [ 'ffmpeg',
                                '-i', "D:\\Tests\\3.asc\\"+video,
                                '-i', "D:\\Tests\\3.asc\\"+img,
                                '-filter_complex', 'overlay',
                                OutputFolder+'\\'+str(video)]

                    pipe = subprocess.Popen(command, stdout = subprocess.PIPE) #, bufsize=10**8


            commandRar = [ 'C:\\Program Files\\WinRAR\\rar.exe',
                            'a',
                            '-cfg-',
                            '-ep1',
                            '-inul',
                            '-m5',
                            DropBoxFolder+'\\'+FolderBaseName+'_'+slaveName]

            # this doesnt work, and also I only want it to happen after the conversion above has finished
            pipeRar = subprocess.Popen(commandRar, stdout = subprocess.PIPE)    

processVideos()

您需要對要創建的Popen對象使用communicate方法。

blah = Popen(...)
blah.communicate()

這也將阻塞,直到完成為止,之后您可以啟動第二個命令。

import subprocess
blah = subprocess.Popen('aaa.bat', stderr=subprocess.STDOUT, stdout=subprocess.PIPE)
blah.communicate()
REN *.log *.txt
MKDIR LOG


FINDSTR "TYPE:1=20000" *.txt > TYPE-1-20000
FINDSTR "TYPE:2=50000" *.txt > TYPE-2-50000
FINDSTR "TYPE:3=100000" *.txt > TYPE-3-100000
FINDSTR "TYPE:4=500000" *.txt > TYPE-4-500000
FINDSTR "OFFLINE" *.txt > OFFLINE
FINDSTR "RTRCT " *.txt > RTRCT 
FINDSTR "RJCT" *.txt > RJCT
FINDSTR "DSPNS" *.txt > DSPNS
FINDSTR "WITHDRAWAL" *.txt > WITHDRAWAL
REN *.? *.txt
MOVE "TYPE-1-20000.TXT" LOG
MOVE "TYPE-2-50000.TXT" LOG
MOVE "TYPE-3-100000.TXT" LOG
MOVE "TYPE-4-500000.TXT" LOG
MOVE      "OFFLINE.TXT" LOG
MOVE "RTRCT.TXT" LOG
MOVE "RJCT.TXT" LOG
MOVE "DSPNS.TXT" LOG
MOVE "WITHDRAWAL.TXT" LOG

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM