当我尝试加载其中一个配置文件时出现错误。这是文件夹结构:
查询字段: 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调用它时不会。它需要在两种情况下运行。
有谁知道导致错误的原因是什么?
答案 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/')