如何通过正确的案例获取python脚本的路径?

时间:2014-01-16 22:10:44

标签: python windows python-2.7

我有一个脚本B.py,是从另一个脚本导入的,例如A.py

如果我在A中导入B,__file__魔法常量已将其路径中的一些大写字母转换为小写。

如果我直接运行B文件,则__file__常量与路径有关。

简而言之,这就是发生的事情。以下内容:

telplugins_path = os.path.dirname(os.path.realpath(__file__))

给我一​​条这样的路径

C:\\Python\\lib\\site_packages\\mypackage

什么时候应该

C:\\Python\\Lib\\site_packages\\mypackage

观察'Lib'的变化 - > 'LIB'

任何人都知道如何通过适当的案例获取__file__的路径?在Windows上运行它。

4 个答案:

答案 0 :(得分:3)

Windows文件系统不区分大小写。

Python只是在C:\Python\lib\site_packages搜索列表中配置了sys.path路径,因此当您导入模块时,python会使用小写版本构建文件路径。

这不是问题。 Windows将继续使用小写版本的路径加载文件。

答案 1 :(得分:1)

在Windows上,win32模块包含函数GetLongPathName。它解决了上述问题。

也就是说,下面给出了一个正确大小的路径:

aFile = win32api.GetLongPathName(__file__)
pathWithCorrectCase = os.path.split(aFile)[0]

但是,我想避免使用win32模块,因为它看起来并非完全“标准”。

答案 2 :(得分:0)

通过标准库产量:

import {Component, View} from 'angular2/core';
import {Http, Response, RequestOptions, Headers, Request, RequestMethod} from 'angular2/http';

import {UserStatus} from './types/types.ts'; // better to write here for type checking etc.....

@Component({
    selector: 'app-service'
})
export class appService {
    headers: Headers;
    requestoptions: RequestOptions;
    res: Response;

    student_category_array: Array<UserStatus> = [];
    constructor(private http: Http) { }

    getUserStatus(url) {

        this.headers = new Headers();
        this.headers.append("Content-Type", 'application/json');
        this.headers.append("Authorization", 'id_token or some thing else....')

        this.requestoptions = new RequestOptions({
            method: RequestMethod.Get,
            url: url,
            headers: this.headers
        })

        return this.http.request(new Request(this.requestoptions(url)))
            .map(res => {
                // DO YOUR STUFF HERE whihc you want to return to component or
                return [{status: res.status, json: res.json()}]
            })
    }
}

答案 3 :(得分:0)

您可以在窗口上进行某些调用,这些调用会因套管不正确而失败。还有像我这样的场景,这些调用被发送到一个区分大小写的机器。

无论情况如何,如果您需要在窗户上使用合适的外壳,这是我找到的最佳解决方案。

对于单个文件,它对listdir很容易,但是如果你有一个你不是正面的目录路径就是正确的:

import win32com.client as com
_dir = <your path>
fso = com.Dispat("Scripting.FileSystemObject")
folder = fso.GetFolder(_dir)
path = folder.path

这将返回正确的路径。