Have a python script always reference the same directory regardless of where it's run in the system
我有一个python脚本,它接受文件名作为参数,并对这些文件执行操作。当前脚本与它操作的文件位于同一目录中。但我希望能够在操作系统的任何地方运行我的python脚本。当我将文件名作为脚本的参数时,它应该确切地知道要查找哪个目录,而不管Python脚本在系统中的哪个位置运行。如何在Python中实现这一点?
这是脚本的相关部分。我可以硬编码路径吗?类型映射文件将是作为参数传递到脚本中的文件名。
1 2 3 4 5 6 7 8 | data = None with open (type_mapping_file,"r") as myfile: data=myfile.read() if(data is not None): request_params = {'type': type_name, 'index': index_name} send_http_request("/index/type/create", request_params, base_url, post_body=data) |
提前谢谢。
我假设您正在寻找一种方法来找到通过相对路径给出的路径,可能从另一个位置调用脚本本身。
1 2 3 4 5 | $ cat print_path.py import os import sys print os.path.abspath(sys.argv[1]) |
如果您在相对路径上调用这个脚本,它将打印绝对路径,这样您就可以在磁盘上找到它。魔法来自于
1 2 3 | $ python print_path.py ./planning.md /Users/Gijs/Desktop/planning.md $ cd .. |
如果你是从别的地方打来的。
1 2 | $ python Desktop/print_path.py Desktop/planning.md /Users/Gijs/Desktop/planning.md |
编辑
不,等等,您正在寻找执行的python文件的位置。在
它怎么知道呢?
如果它是一个常量路径,可以将其硬编码到脚本中,然后使用
1 2 3 4 5 6 | import os import sys BASE_PATH = '/my/const/path' fullpath = os.path.join(BASE_PATH,sys.argv[1]) |
尽管如注释中所述,更灵活的解决方案是将路径作为单独的参数传递,或者为每个文件传递绝对路径。
当前文件的完整路径是一个称为
1 | print("This Python file is in" + os.path.dirname(__file__)) |
然后,您可以使用命令行上提供的参数来执行
请注意,以这种方式使用