2017-06-21 52 views
0

我在尝试加载其中一个配置文件时收到错误消息。以下是文件夹结构:Python无法在文件夹树中找到文件

  1. script.rb
  2. ROOT_FOLDER
    • command_line_interface.py
    • 演员
      • utils.py
      • AZ
        • Ç onfig1.txt
        • config2.txt
      • BZ
        • config1.txt
        • config2.txt

查询folows: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根据动态加载config.txt动作参数[R使用BASE_PATH

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


IO错误:[错误2]没有这样的文件或目录: '\演员\ BZ \ config2.txt'
它的工作原理是:在Windows里面的提示直接ROOT_FOLDER叫,但是它从script.rb中调用时没有。它需要在两种情况下运行。 有谁知道是什么导致了错误?

+1

\ extras'?你的意思是你得到了一个领先的反斜杠?打印'文件名'并发布值。 –

+0

这是打印文件的名称: extras/BZ/config2.txt –

回答

0

的解决方案是:

def run(action): 
    base_path = os.path.join(os.path.dirname(sys.argv[0]), 'extras/BZ/') 
错误消息你`
0

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

1

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

通常情况下,最好总是使用绝对路径。为了创建绝对路径,最好使用os.path.join()而不是串联字符串。

+0

嗨,是的,我发现有人说使用os.getcwd()但它返回C:\ Users \ user \ Documents 如果我与os.path连接。实际路径将是: C:\ Users \ user \ Documents \\ extras \ BZ \ config2.txt,缺少中间 –

+0

@FelipeBarbosa中的root_folder,所以现在你知道,你不在你的root_folder中。所以用你的root_folder扩展你的cwd,或者扩展你的基本路径,以便使用相对路径到达目录。 – olisch

+0

我猜这是不可能的,root_folder的名字是未知的,它取决于用户的PC,也不可能改变script.rb。 –