如何在python中编写find和exec命令

时间:2015-03-11 16:02:36

标签: python linux bash shell unix

我有一个shell脚本

find /tmp/test/* -name "*.json" -exec python /python/path {} \;

它查找特定目录中的所有JSON文件,并执行我拥有的OTHER python脚本..

我该怎么做这个python脚本?

4 个答案:

答案 0 :(得分:1)

我不确定我是否理解你的问题,如果你试图从python脚本执行shell命令,你可以使用os.system():

import os
os.system('ls -l')

complete documentation

答案 1 :(得分:0)

如果您想使用Python而不是find,请从os.walkofficial doc)开始获取文件。一旦你拥有了它们(或者就像它们一样),你可以随心所欲地对它们采取行动。

从该页面开始:

import os

for dirName, subdirList, fileList in os.walk(rootDir):
    print('Found directory: %s' % dirName)
    for fname in fileList:
        print('\t%s' % fname)
        # act on the file

答案 2 :(得分:0)

import glob,subprocess
for json_file in glob.glob("/home/tmp/*.json"):
    subprocess.Popen(["python","/path/to/my.py",json_file],env=os.environ).communicate()

答案 3 :(得分:0)

我想你想调整你的其他python文件/python/path/script.py,这样你只需要这个文件:

#!/usr/bin/env python
import sys
import glob
import os

#
# parse the command line arguemnts
#
for i, n in enumerate(sys.argv):
    # Debug output
    print "arg nr %02i: %s" % (i, n)

    # Store the args in variables
    # (0 is the filename of the script itself)
    if i==1:
        path = sys.argv[1] # the 1st arg is the path like "/tmp/test"
    if i==2:
        pattern = sys.argv[2] # a pattern to match for, like "'*.json'"

#
# merge path and pattern
# os.path makes it win / linux compatible ( / vs \ ...) and other stuff
#
fqps = os.path.join(path, pattern)

#
# Do something with your files
#
for filename in glob.glob(fqps):
    print filename

    # Do your stuff here with one file        
    with open(filename, 'r') as f:  # 'r'= only ready from file ('w' = write)
        lines = f.readlines()
    # at this point, the file is closed again!
    for line in lines:
        print line
        # and so on ...

然后你可以像这样使用一个脚本 /python/path/script.py /tmp/test/ '*.json'。 (不需要在前面写python,这要归功于第一行,称为shebang。但你需要使用chmod +x /python/path/script.py)使其成为可执行文件。

当然你可以省略第二个arg并为pattern指定一个默认值,或者只在第一个位置使用一个arg。我这样做是为了演示os.path.join()和引用不应该被bash扩展的参数(比较在开始时打印的参数列表中使用'*.json'*.json的效果)

Here是关于处理命令行参数的更好/更复杂方法的一些信息。

并且,作为奖励,using a main() function也是可取的,以便在脚本变大或其他python脚本正在使用时保持概述。