我正在尝试在我的 python 脚本中使用 bash 函数来允许我找到一个特定的目录,然后在该目录中 grep 一个给定的文件。问题是我只有目录名的一部分,所以我需要使用 bash 函数 find 来获取目录名的其余部分(名称是唯一的并且只会返回一个文件夹)
我目前的代码如下:
def get_tag(part_of_foldername):
import subprocess
import os
p1 = subprocess.Popen(["find", "/path/to/directory", "-maxdepth", "1", "-name", "%s.*" % part_of_foldername, "-type", "d"], stdout=subprocess.PIPE)
directory = p1.communicate()[0].strip('\n')
os.chdir(directory)
p2 = subprocess.Popen(["grep", "STUFF_", ".hgtags"], stdout=subprocess.PIPE)
tag = p2.comminucate()[0].strip('\n')
return tag
这才是真正奇怪的地方。当您逐行将此代码输入交互式时,此代码有效,但在通过脚本运行时无效。当您将脚本文件导入交互式并调用该函数时,它也会起作用,但当它被 main 函数调用时则不起作用。我直接运行脚本得到的回溯如下:
Traceback (most recent call last):
File "./integration.py", line 64, in <module>
main()
File "./integration.py", line 48, in main
tag = get_tag(folder)
File "./integration.py", line 9, in get_date
os.chdir(directory)
OSError: [Errno 2] No such file or directory: ''
它在主函数中是这样调用的:
if block_dict[block][0]=='0':
tag = get_tag(folder)
之前将“文件夹”定义为字符串。
请注意,我们使用的是 python 2.6,所以很遗憾我无法使用模块 check_output。
最佳答案
您是否尝试过使用 glob模块而不是查找?
import glob
glob.glob("/path/to/directory/*/SomeDir/path/*")
您可以使用 ** 查看过去的多个目录:
glob.glob("/path/**/SomeDir/path/*")
这将匹配/path/to/your/SomeDir/path/file。
https://stackoverflow.com/questions/17219675/