Python脚本路径

时间:2018-03-13 08:55:09

标签: python pythonpath

让我们假设以下目录树:

   /
    home/
     user/
       X/
         scripy.py
          Y/
            a.c
            b.c

我有一个python脚本,有很多命令使用相对路径,这样做:

def f1(relative_path_to_a, relative_path_to_c):
    abs_path = PATH_TO_PLACE_FROM_SCRIPT_WAS_CALLED
    c_abs_path = abs_path + relative_path_to_c
    file_a = open(relative_path_to_a)
    file_a.write(c_abs_path)
    close()

正如它发现的那样,我需要在另一台具有不同目录树的机器上使用它。还应该有可能从其他位置调用脚本,而不是放置脚本。 将所有路径更改为绝对路径需要一些时间,但并非不可能。另一方面,我提出了将脚本开头的路径更改为/home/user/X的想法(我通过向X目录添加一个python文件并在其内部调用来实现它{ {1}},然后在script.py中abs_path = os.path.abspath(".")

第二种解决方案的缺点是什么?有什么情况可以崩溃吗?

准确地说,在第二个解决方案中,我正在做这个:

os.chdir(second_script.abs_path)

1 个答案:

答案 0 :(得分:0)

要使程序可重用,它们应相对于当前工作目录工作,而不是更改cwd 而不是相对于程序的位置。所以你应该使用类似的东西:

# relative_path_to_a = 'Y/a.c'
# relative_path_to_c = 'Y/b.c'

def f1(relative_path_to_a, relative_path_to_c):
    c_abs_path = os.path.abspath(relative_path_to_c)
    a_abs_path = os.path.abspath(relative_path_to_a)
    with open(a_abs_path) as file_a:
        file_a.write(c_abs_path)

这意味着您运行的用户X

(cd /user/X && python script.py)  # modifies /user/X/Y/a.c

并且对于用户Z,您可以使用

重用该脚本
(cd /user/Z && python ../X/script.py)   # modifies /user/Z/Y/a.c