Python无法在文件夹树中找到文件

时间:2017-06-21 19:27:26

标签: python ruby

当我尝试加载其中一个配置文件时出现错误。这是文件夹结构:

  1. script.rb
  2. ROOT_FOLDER
    • command_line_interface.py
    • 额外
      • utils.py
      • AZ
        • config1.txt
        • config2.txt
      • BZ
        • config1.txt
        • config2.txt
  3. 查询字段: script.rb> command_line_interface.py> utils.py> config2.txt
    script.rb

    IO.popen("./root_folder/command_line_interface.py -arg1 5")
    

    command_line_interface.py

    if __name__ == '__main__':
        sys.path.append(os.path.dirname(sys.argv[0]))
        parser = argparse.ArgumentParser(description='Test')
        parser.add_argument('-arg1', '--arg1', action='store', type=int, help='Test', dest='arg1')
        args = parser.parse_args()
        if args.arg1:
            utils.run(action)
    


    utils.py 中使用 base_path 根据 action 参数加载config.txt:

    def run(action):
        base_path = 'extras/BZ/'
        .
        .
        .
        filename = base_path + 'config2.txt'
        with open(filename) as f:
            result = json.load(f)
    


    IOError:[Errno 2]没有这样的文件或目录:'\ extras \ BZ \ config2.txt'
    它在root_folder中直接在windows提示符中调用时有效,但是从script.rb调用它时不会。它需要在两种情况下运行。 有谁知道导致错误的原因是什么?

3 个答案:

答案 0 :(得分:1)

你的ruby脚本不是在root_folder中启动的,所以你的相对基本路径是不正确的。您可以使用os.getcwd()来获取当前的工作目录。相对路径总是从那里开始。

一般情况下,最好始终使用绝对路径。对于创建绝对路径,最好使用os.path.join()而不是仅连接字符串。

答案 1 :(得分:0)

请记住,如果您从其文件夹中运行script.rb,那么ALL OF THE CODE就会像在该文件夹中一样运行。 所以我认为你应该尝试将base_path设置为'./root_folder/extras/BZ/',以检查是否存在问题。

答案 2 :(得分:0)

解决方案是:

def run(action):
    base_path = os.path.join(os.path.dirname(sys.argv[0]), 'extras/BZ/')