我有一个shell脚本
find /tmp/test/* -name "*.json" -exec python /python/path {} \;
它查找特定目录中的所有JSON文件,并执行我拥有的OTHER python脚本..
我该怎么做这个python脚本?
答案 0 :(得分:1)
我不确定我是否理解你的问题,如果你试图从python脚本执行shell命令,你可以使用os.system():
import os
os.system('ls -l')
答案 1 :(得分:0)
如果您想使用Python而不是find,请从os.walk(official 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脚本正在使用时保持概述。