【发布时间】:2013-06-05 01:07:38
【问题描述】:
每当我在 Python 中保存文件时,它都会保存在当前工作目录中。由于某些未知原因,Python 已停止保存在 pwd 中。我的数字现在保存在它下面的目录中。因此,它们现在被保存在 /Documents/.../OrbitalMechanics 中,而不是保存在 /Documents/.../OrbitalMechanics/OrbitalNotes 中。我的操作系统是 Ubuntu 13.04,我正在使用 Emacs,并从终端编写程序。当我调用我的.py 文件时,路径是emacs ~/Documents/.../OrbitalMechanics/OrbitalNotes/stumpff.py。因此,我在正确的目录中。
什么会导致这个问题?保存人物时,我没有更改任何我正常执行的操作。
发生这种情况的程序如下:
#!/usr/bin/env ipython
# This program plots the Stumpff functions C(z) and S(z)
import numpy as np
import pylab
from matplotlib.ticker import MaxNLocator
def C(z):
if z > 0:
return (1 - np.cos(z ** 0.5)) / z
elif z < 0:
return (np.cosh(np.sqrt(-z)) - 1) / -z
return 0.5
def S(z):
if z > 0:
return (np.sqrt(z) - np.sin(z ** 0.5)) / np.sqrt(z) ** 3
elif z < 0:
return (np.sinh(np.sqrt(-z)) - np.sqrt(-z)) / np.sqrt(-z) ** 3
return 1.0 / 6.0
vC = np.vectorize(C)
vS = np.vectorize(S)
z = np.linspace(-50.0, 500.0, 500000.0)
y = vC(z)
y2 = vS(z)
fig = pylab.figure()
ax = fig.add_subplot(111)
ax.plot(z, y, 'r')
ax.plot(z, y2, 'b')
pylab.legend(('$C(z)$', '$S(z)$'), loc = 0)
pylab.xlim((-50, 0))
pylab.ylim((0, 15))
pylab.xlabel('$z$')
pylab.gca().xaxis.set_major_locator(MaxNLocator(prune = 'lower'))
pylab.savefig('stumpffneg50to0.eps', format = 'eps')
编辑:
以前,当我保存图形时,即使我不在该目录中,该图形也会保存在 .py 文件所在的目录中。也就是说,我可以在主目录中,运行emacs 中的文件,该文件将是我想要保存的位置。现在,即使文件过去总是保存在 python 脚本的位置,但情况并非如此。
如果我从终端以ipython ~/path/to/file 运行文件,数字将保存.py 文件所在的位置。
如果我在emacs 中打开文件并使用C-c C-c 运行文件,文件将保存在.py 文件所在目录的下一级。
如果我 cd 到目录然后打开emacs 中的文件,该文件将再次保存下一级。
【问题讨论】:
-
您的代码非常适合我(OS X,从终端运行)。你是从 Emacs 内部运行它吗?如果是这样,如果您从终端运行它,而在您希望保存文件的确切目录中,会发生什么?如果你从 ipython 切换到 python 会发生什么?
-
@cge 我在终端内运行它。这是第一次发生这种情况。如果我以
ipython path/to/file运行它,那么它会保存在正确的目录中。 -
当你启动一个脚本时,它不会
cd到脚本所在的目录。例如,如果你cd ~/foo,然后python ~/bar/baz.py,则该脚本的当前工作目录是仍然是~/foo,而不是~/bar。 -
@abarnert python 一直保存在我使用 python 时创建文件的正确目录中,但这个脚本除外。
-
@dustin:如果您一直在运行当前工作目录中的脚本,现在您已经完成了
cd,或者此脚本与其他脚本位于不同的目录中,那么你会得到不同的结果。这不是因为 Python 做错了什么;而是因为 Python 做错了什么。这就是“当前工作目录”的工作原理。