2014-01-15 189 views
1

我试图迭代inspect.stack()以获取文件层次结构。inspect.stack()用斜杠和反斜杠返回路径值

一个简单的例子:

for value in inspect.stack(): 
    print value[1] 

输出将是:

C:\xxx\ATE\Utilities\Simulator\Simulator.py 
C:\xxx\ATE\Utilities\Simulator\Simulator.py 
C:\xxx\ATE\Utilities\Simulator\serial.py 
C:\xxx\ATE\Utilities\Serial\SerialHandle\trunk\SerialHandle.py 
C:/xxx/ATE/DUTDrivers/DD_SimulatorExample/DD_Example_Simulator.py 

现在,我使用的字符串操作删除的文件名,并且在使用中的路径名称我软件。

问:

为什么会出现有一些路径与斜线(\)和一些有反斜杠(/)?

注:我知道我可以使用replace更换反斜线削减或只使用os.path.normpath(path)做一个简单的字符串操作,但我试图理解为什么inspect.stack模块返回这样的说法?

+1

如何启动DD_Example_Simulator.py? Cmd.exe,空闲,别的? –

+0

@Nigel Tufnel +1在cmd.exe模式下工作正常!如果有人知道为什么使用pycharm,它会发生这种情况。 –

回答

2

似乎PyCharm使用完整路径和正斜杠(/)开始DD_Example_Simulator.py

这就是为什么你只看到DD_Example_Simulator.py路径中的正斜杠(其余路径是由Python解释器构建的,因此具有正确的Windows反斜杠)。作为一个方面说明:在Windows上使用正斜杠非常合适。那么,至少我的Windows副本不介意正斜杠。

让我们使用cmd.exe过期。

让我们创建两个文件。

第一:

// inspectso.py 
import inspect 

for value in inspect.stack(): 
    print value[1] 

二:

// inspect_so.py 
import inspectso 

的expirement的最后一步:在cmd中运行这些命令:

e:\Temp>c:/Python27/python.exe E:/temp/inspect_so.py 
E:\temp\inspectso.py 
E:/temp/inspect_so.py 

e:\Temp>c:/Python27/python.exe E:\temp\inspect_so.py 
E:\temp\inspectso.py 
E:\temp\inspect_so.py 

e:\Temp>c:/Python27/python.exe inspect_so.py 
e:\Temp\inspectso.py 
inspect_so.py 

正如我们可以看到inspect_so.py路径是通过命令行传递的,因此打印的路径始终为inspectso.py严重背斜。