open()/f.write()在使用py 2app“编译”python后不工作

1cklez4t  于 2023-01-12  发布在  Python
关注(0)|答案(4)|浏览(111)

使用py2app.py转换为.app。起初,它看起来很好,但当我执行open()f.write(如下所示)来创建.txt时,它不会创建文件。

f = open(name + ".txt", "w")
f.write("users inputs here")

当我以.py的身份运行程序时,这绝对可以正常工作
任何人有任何想法,我似乎找不到任何东西在那里解释为什么会发生这种情况。

uhry853o

uhry853o1#

问题在于,当应用从Finder启动时,当前目录被设置为/,因此路径相对于/,而不是应用捆绑包。
要获取Python exe的路径,请尝试sys.executable。注意,您可能需要添加../../以退出Contents/MacOS目录。
但是,更好的解决方案可能是简单地使用文件对话框,允许用户选择保存位置。

xt0899hw

xt0899hw2#

我的程序也遇到了同样的问题,我打开一个文件,并将列标题写入该文件,然后在程序中循环迭代数据。当应用程序转换为.app时,程序将在到达将列标题写入文件时失败。如果我将其注解掉,它会工作得很好。我删除了列标题文本中的所有特殊字符,它工作得很好。不确定这是为什么。
不起作用:

file.write("\n" + "Image" + "\t" + "x (pxl)" + "\t" + "y (pxl)" + "\t" + "radius (ID; µm)" + "\t" + "GlobalThresh Reported:" + "\n")

作品:

file.write("\n" + "Image" + "\t" + "x" + "\t" + "y" + "\t" + "radius" + "\t" + "GlobalThresh Reported" + "\n")
bttbmeg0

bttbmeg03#

一个实现sys.executable的实用解决方案,如@nneonneo状态可以是这样一个;这对我很有效

location = os.path.abspath(
        os.path.join(sys.executable + "/file_name", '..', '..', '..', '..','..', "file_name"))

它打印文件一级以上的.app文件夹

vyswwuz2

vyswwuz24#

我遇到了同样的问题。
启动 /dist/Appname.app/Contents/MacOS/Appname时,应用程序运行正常:打开文件,截断文件,写入新内容,然后关闭文件。
启动应用程序本身不知何故失败与open(file=os.path.expanduser(outputPath), mode="w"),只是产生了一个空文件。
encoding="utf-8"添加到open语句解决了这个问题。
我只是在查看我正在使用的open as对象时才注意到-突然它变成了encoding='US-ASCII'

相关问题