파일을 파이썬으로 저장할 때마다 현재 작업 디렉토리에 저장됩니다. 알려지지 않은 이유로 파이썬은 pwd
에 저장을 중단했습니다. 내 인물이 그 아래의 디렉토리에 저장 중입니다. 따라서 /Documents/.../OrbitalMechanics/OrbitalNotes
에 저장하는 대신 /Documents/.../OrbitalMechanics
에 저장됩니다. 내 운영체제는 우분투 13.04이고, 이멕스를 사용하고 있으며 터미널에서 프로그램을 작성하고있다. 내 .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
에서 실행하면 파일을 저장하고 싶을 수 있습니다. 자,이 파일은 항상 파이썬 스크립트의 위치에 저장하는 데 사용되는 경우에도 그렇지 않습니다.
터미널에서 파일을 ipython ~/path/to/file
으로 실행하면 그림은 .py
파일이 저장된 위치를 저장합니다. 내가 emacs
에서 파일을 열고 파일을 실행 C-c C-c
를 사용하는 경우
, 파일은 .py
파일이있는 디렉토리에서 한 수준 아래로 저장됩니다.
을 디렉토리로 I CD에는 다음의 파일을 열 경우 emacs
이면 파일이 다시 한 수준 아래로 저장됩니다.
코드는 나를 위해 완벽하게 작동합니다 (OS X , 터미널에서 실행). Emacs에서 이걸 실행하고 있습니까? 그렇다면 터미널에서 파일을 실행하면 파일이 저장 될 정확한 디렉토리에서 어떤 일이 발생합니까? ipython에서 파이썬으로 전환하면 어떻게됩니까? – cge
@cge 터미널에서 실행하고 있습니다. 이것이 일어난 것은 이번이 처음입니다. 'ipython path/to/file'로 실행하면 올바른 dir에 저장됩니다. – dustin
스크립트를 시작하면 스크립트가있는 디렉토리로'cd '하지 않습니다. 예를 들어,'cd ~/foo','python ~/bar/baz.py', 현재 작업 디렉토리 그 스크립트는 여전히'~/foo'이지'~/bar'가 아닙니다. – abarnert