我有脚本调用其他脚本文件,但我需要获取当前在该进程中运行的文件的文件路径.
例如,假设我有三个文件.使用execfile:
script_1.py电话script_2.py.script_2.py打电话script_3.py.我怎样才能获得的文件名和路径script_3.py,从内部代码script_3.py,而无需从传递这些信息作为参数script_2.py?
(执行os.getcwd()返回原始起始脚本的文件路径而不是当前文件的.)
根据官方文档,os.path是一个模块.那么,导入它的首选方式是什么?
# Should I always import it explicitly?
import os.path
Run Code Online (Sandbox Code Playgroud)
要么...
# Is importing os enough?
import os
Run Code Online (Sandbox Code Playgroud)
请不要回答" os为我导入作品".我知道,它现在也适用于我(从Python 2.6开始).我想知道的是关于这个问题的任何官方建议.因此,如果您回答此问题,请发布您的推荐信.
之间有什么区别:
__file__
和
sys.argv[0]
因为两者似乎都在做同样的事情:他们拥有脚本的名称.
如果没有差别,那么为什么__file__几乎所有的地方都使用它,而我从未见过sys.argv[0]被使用过.
如何获取正在运行的Python脚本的名称?
我试过os.__file__但是返回了os所在文件的名称.
如何让python脚本自行更改?
为了简化它,我想有一个run.py像这样的python脚本()
a = 0
b = 1
print a + b
# do something here such that the first line of this script reads a = 1
Run Code Online (Sandbox Code Playgroud)
这样下次运行脚本时就会看起来像
a = 1
b = 1
print a + b
# do something here such that the first line of this script reads a = 2
Run Code Online (Sandbox Code Playgroud)
这有可能吗?该脚本可能使用外部资源; 但是,一切都应该只运行一个run.py文件.
编辑:它可能不够清楚,但脚本应该更新自己,而不是任何其他文件.当然,一旦你允许在脚本旁边有一个简单的配置文件,这个任务就很简单了.
回答:
它实际上比想象容易得多.@khelwood的建议工作正常,打开脚本并将其自己的内容写入其中是完全没有问题的.@ Gerrat的解决方案也很好用.这就是我的方式:
# -*- coding: utf-8 -*-
a = 0
b = 1
print a + b …Run Code Online (Sandbox Code Playgroud) 我刚刚通过了检查模块文档.
究竟有什么区别:
inspect.getfile()
Run Code Online (Sandbox Code Playgroud)
和
inspect.getsourcefile()
Run Code Online (Sandbox Code Playgroud)
我得到两个完全相同的文件路径(模块).
我正在将 python 用于科学应用程序。我使用各种参数运行模拟,我的脚本将数据输出到该参数集的适当目录。后来我使用这些数据。但是有时我会编辑我的脚本;为了能够在需要时重现我的结果,我想要一份用于生成数据的脚本的任何版本的副本,这些数据就在包含数据的目录中。所以基本上我想让我的python脚本将自己复制到数据目录。做到这一点的最佳方法是什么?
谢谢!