在python解释器与脚本文件中运行时的结果不同

时间:2013-06-20 17:08:31

标签: python bash grep subprocess

我正在尝试在我的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。

3 个答案:

答案 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]的结果。它可能是空字符串。

<{1}}中{p> .似乎是原因。

<强>更新

发现拼写错误:"%s.*" % part_of_foldername - &gt; comminucate


comminucate