我正在尝试在我的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
这真的很奇怪。当您逐行将其输入到交互式中时,此代码可以正常工作,但在通过脚本运行时则不行。当您将脚本文件导入交互式并调用该函数时,它也可以工作,但在主函数调用时则不行。我从直接运行脚本得到的回溯如下:
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)
将“folder”先前定义为字符串。
请注意我们使用python 2.6,所以不幸的是我无法使用模块check_output。
答案 0 :(得分:0)
显然p1.communicate()[0].strip('\n')
返回一个空字符串。你真的在你的例子中使用硬编码值"/path/to/directory"
吗?
答案 1 :(得分:0)
您是否尝试使用glob模块而非查找?
import glob
glob.glob("/path/to/directory/*/SomeDir/path/*")
您可以使用**来查看多个目录:
glob.glob("/path/**/SomeDir/path/*")
这将匹配/ path / to / your / SomeDir / path / file。
答案 2 :(得分:0)
检查p1.communicate()[0]
的结果。它可能是空字符串。
.
似乎是原因。
<强>更新强>
发现拼写错误:"%s.*" % part_of_foldername
- &gt; comminucate
comminucate