我正在为我的文本编辑器制作一个压缩脚本,并且它正在完成文件Run
所需的部分。 Run内部只是这段代码:python ./App.pyc
。当我在Finder中双击该程序时,它在终端中显示它为can't open file './App.pyc' [Errno 2] No such file or directory
。
如果我在cd
到目录Run
和App.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]
?我以前从未见过它。)
答案 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的回答为准。但是,我不删除我的尝试,因为评论似乎对其他人有用!