Bash在脚本中找不到正确的目录

时间:2014-12-19 13:19:06

标签: python bash cd

我正在为我的文本编辑器制作一个压缩脚本,并且它正在完成文件Run所需的部分。 Run内部只是这段代码:python ./App.pyc。当我在Finder中双击该程序时,它在终端中显示它为can't open file './App.pyc' [Errno 2] No such file or directory

如果我在cd到目录RunApp.pyc之后通过终端运行它,它就可以了。我假设这是因为我们不在正确的目录中。

我的问题是,如何确保在正确的目录中运行Run?如果我将cd放入其中,它会起作用,但如果有人将文件夹移动到其他地方则不再有效。


#!/usr/bin/python

### Compresser script.

# Compress files.
import App
import Colors

# Import modules
import os

# Clear the folder to put the compressed
# files in (if it exists).
try:
    os.system('rm -rf BasicEdit\ Compressed')
except:
    pass

# Remake the folder to put compressed files in.
os.system('mkdir BasicEdit\ Compressed')

# Move the compiled files into the BasicEdit
# Compressed folder.
os.system('mv App.pyc BasicEdit\ Compressed/')
os.system('mv Colors.pyc BasicEdit\ Compressed/')

# Create contents of run file.
run_file_contents = "python ./App.pyc\n"

# Write run file.
run_file = open("./BasicEdit Compressed/Run", 'w')
run_file.write(run_file_contents)

# Give permissions of run file to anybody.
os.system('chmod a+x ./BasicEdit\ Compressed/Run')

# Finally compress BasicEdit, and remove the old
# folder for BasicEdit Compressed.
os.system('zip -9r BasicEdit.zip BasicEdit\ Compressed')
os.system('rm -rf BasicEdit\ Compressed')

(PS,什么是[Errno 1]?我以前从未见过它。)

2 个答案:

答案 0 :(得分:3)

可以使用os.chdir()调用修改Python脚本的当前工作目录,之后对.的引用将是正确的。

如果要查找当前正在运行的源文件的位置而不是硬编码目录,可以使用:

os.chdir(os.path.dirname(__file__))

相当于这个逻辑的bash是:

cd "${BASH_SOURCE%/*}" || {
  echo "Unable to change directory to ${BASH_SOURCE%/*}" >&2
  exit 1
}

有关详情和注意事项,请参阅BashFAQ #28

答案 1 :(得分:0)

正如上面与@William Purcell一起开发的那样,您必须通过os.pwd()检索绝对路径,然后使用python调用的绝对路径。

我撤回了我的提议,并以@Charles Duffy的回答为准。但是,我不删除我的尝试,因为评论似乎对其他人有用!