使用py2app“编译”python后,open()/ f.write()无法正常工作

时间:2012-09-03 13:06:44

标签: python file-io tkinter fwrite py2app

使用py2app将y .py转换为.app。在第一次看起来它看起来很好但是当我去执行open()和f.write(如下所示)来创建.txt它不会创建文件。

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

当我以.py

运行程序时,这非常正常

任何人都有任何想法,我似乎找不到任何可以解释为什么会这样的事情。

3 个答案:

答案 0 :(得分:3)

问题是当从Finder启动应用程序时,当前目录设置为/。因此,路径相对于/,而不是您的应用包。

要获取Python exe的路径,请尝试sys.executable。请注意,您可能需要添加../../才能退出Contents/MacOS目录。

但是,更好的解决方案可能是简单地使用文件对话框,允许用户选择保存位置。

答案 1 :(得分:0)

我的程序遇到了同样的问题,我打开一个文件并将列标题写入该文件,然后在程序中稍后以循环方式将数据迭代到该文件中。当应用程序转换为.app时,程序到达文件的写入列标题时将失败。如果我将其注释掉,它将可以正常工作。我从列标题中的文本中删除了所有特殊字符,效果很好。不知道为什么会这样。

不起作用:

RefNum  IDOrder   ID        DetailDesc        HRs
43      1         110011    Test detail 1.    1.5
43      2         220022    Test detail 1.    1.5
43      3         330033    Test detail 1.    1.5
43      1         110011    Test detail 2.    0.75
43      2         220022    Test detail 2.    0.75
43      3         330033    Test detail 2.    0.75
43      1         110011    Test detail 3.    1.25
43      2         220022    Test detail 3.    1.25
43      1         110011    Test detail 4.    1.5
43      2         220022    Test detail 4.    1.5
43      1         110011    Test detail 5.    0.5
43      1         110011    Test detail 6.    2

有效:

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

答案 2 :(得分:0)

一个实现sys.executable的实用解决方案,因为@nneonneo状态可以是这个;它对我有用:

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

将文件打印到.app文件夹正上方的一级