使用Python对fold中的每个文件执行命令

2024-04-19 03:26:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试创建一个Python脚本,它将:

  1. 查看文件夹“/input”
  2. 对于该文件夹中的每个视频,运行mencoder命令(将它们转换为可在手机上播放的内容)
  3. 一旦mencoder完成了他的运行,删除原始视频。

这看起来不太难,但我对python很在行:)

对剧本的样子有什么想法吗?

附加问题:我应该使用

os.system

或者

subprocess.call

是吗?

Subprocess.call似乎允许更可读的脚本,因为我可以这样编写命令:

cmdLine = ['mencoder', sourceVideo, '-ovc', 'copy', '-oac', 'copy', '-ss', '00:02:54', '-endpos', '00:00:54', '-o', destinationVideo]

编辑:好的,可以:

import os, subprocess

bitrate = '100'
mencoder = 'C:\\Program Files\\_utilitaires\\MPlayer-1.0rc2\\mencoder.exe'
inputdir = 'C:\\Documents and Settings\\Administrator\\Desktop\\input'
outputdir = 'C:\\Documents and Settings\\Administrator\\Desktop\\output'

for fichier in os.listdir(inputdir):
    print 'fichier :' + fichier
    sourceVideo = inputdir + '\\' + fichier
    destinationVideo = outputdir + '\\' + fichier[:-4] + ".mp4"

    commande = [mencoder,
               '-of',
               'lavf',
               [...]
               '-mc',
               '0',

               sourceVideo,
               '-o',
               destinationVideo]

    subprocess.call(commande)

os.remove(sourceVideo)
raw_input('Press Enter to exit')

为了清楚起见,我已经删除了mencoder命令,因为我还在处理它。

感谢大家的投入。


Tags: 命令脚本文件夹input视频oscalldocuments
3条回答

使用os.walk在目录内容上递归迭代:

import os

root_dir = '.'

for directory, subdirectories, files in os.walk(root_dir):
    for file in files:
        print os.path.join(directory, file)

这里的os.system和subprocess.call之间没有真正的区别——除非您必须处理命名奇怪的文件(文件名包括空格、引号等)。如果是这样的话,subprocess.call肯定更好,因为您不需要对文件名进行任何shell引用。当您需要接受任何有效的shell命令(例如从配置文件中的用户接收到的命令)时,os.system会更好。

要查找所有文件名,请使用os.listdir()

然后在文件名上循环。就像这样:

import os
for filename in os.listdir('dirname'):
     callthecommandhere(blablahbla, filename, foo)

如果您喜欢子流程,请使用子流程。:-)

Python可能会为此而大肆杀戮。

for file in *; do mencoder -some options $file; rm -f $file ; done

相关问题 更多 >