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

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

相关文章:

macos - 运行 make 时如何修复 ranlib/libtool 错误

ajax - 我可以添加 Access-Control-Allow-Origin : * to th

linux - 为什么我得到数据大小大于 mss 的数据包?

database - 是否有任何工具可以从数据库模式的 json 表示自动生成 ERD 图?

android-layout - 在滑动选项卡中水平滚动 : android

css - 使用渐变生成饱和度/亮度蒙版

python - 从 Python 中的角度集生成多边形?

nginx - 如何替换 HTTP 请求 URI 中的特殊字符?

json - 将 JSON 数据加载到大查询中时出错 : flat value specified

c++-cli - 导出 C++/CLI native 类 (C4679)