python相当于cmd' s"对于%% a in(%*)do"

时间:2015-02-24 04:29:06

标签: python python-2.7

我是一个python初学者,希望能够在python脚本上删除视频文件,并在其上运行多个FFMPEG命令,将文件名作为输出文件名的变量传递。 我得到了点点滴滴的命令。我很感激我能编辑的基本功能脚本。 我目前使用的是Windows批处理:

FOR %%a IN (%*) do (
c:\ffmpeg.exe -i "%%~a" "do some stuff" "D:\%%~na\%%~na_360.mp4"
c:\ffmpeg.exe -i "%%~a" "do some stuff" "D:\%%~na\%%~na_480.mp4"
)

我认为Python应该运行多平台(Win,Mac,Linux),python有FFMPEG管道,这使得它很快。

1 个答案:

答案 0 :(得分:2)

%*迭代给予程序的参数。在python中,这些在sys.argv中可用,但第一个参数argv[0]是程序本身的名称;因此,对于其他参数,我们使用sys.argv[1:]~n代表文件名,在Python中可以在os.path.basename的帮助下实现;我们也使用subprocess.call执行程序,因为它比os.system更安全;需要r''原始字符串,因为\用于在普通Python字符串中转义;虽然原始字符串不适用于以\\结尾的字符串 - 但我们需要'D:\\'

因此我们得到:

import sys
from subprocess import call
from os.path import basename, join, splitext

for a in sys.argv[1:]:
    base, _ = splitext(basename(a))

    # target_prefix is D:\%%~na\%%~na
    target_prefix = join('d:\\', base, base)
    args = [r'c:\ffmpeg.exe', '-i', a, 'do', 'some', 'stuff']

    call(args + [target_prefix + '_360.mp4'])
    call(args + [target_prefix + '_480.mp4'])