python脚本在cx_freeze之后没有写入文件

时间:2017-12-29 17:18:34

标签: python cx-freeze

我正在编写一个我打算用cx_freeze冻结的脚本。 (我使用的是Python 3.6和Cx_Freeze 5.1.1)

我目前面临的问题是我的Python脚本 - 完全像.py一样 - 一旦被cx_freeze冻结,它会读取'text.txt'文件的内容,但似乎无法写入。< / p>

我已经写了一个我正在尝试做的简化版本,问题仍然存在。

这是我的main.py

from tkinter import *

def writing():
    word = str(word_field.get())
    ft = open('text.txt', 'w')
    ft.write(word)
    ft.close()

def from_file():
    ft = open('text.txt', 'r')
    string = ''
    for line in ft:
        line = line.strip()
        string = string+line
    ft.close()

    root2 = Tk()
    result = Label(root2, text=string)
    result.grid(row=1, column=1)
    root2.mainloop()

 root = Tk()
 root.title('My window')
 word_field = Entry(root)
 btn_1 = Button(root, text='Read', command=from_file)
 btn_2 = Button(root, text='Write', command=writing)

 word_field.grid(row=1, column=1, columnspan=2)
 btn_1.grid(row=2, column=1)
 btn_2.grid(row=2, column=2)

 root.mainloop()

这是我用于cx_freeze的setup.py

from cx_Freeze import setup, Executable
import os.path

PYTHON_INSTALL_DIR = os.path.dirname(os.path.dirname(os.__file__))
os.environ['TCL_LIBRARY'] = os.path.join(PYTHON_INSTALL_DIR, 'tcl', 'tcl8.6')
os.environ['TK_LIBRARY'] = os.path.join(PYTHON_INSTALL_DIR, 'tcl', 'tk8.6')

setup(
    name = "Prova",
    version = "1.0.0",
    options = {"build_exe": {
            'packages': ["tkinter"],
            'include_files' : [os.path.join(PYTHON_INSTALL_DIR, 'DLLs', 'tk86t.dll'), \
            os.path.join(PYTHON_INSTALL_DIR, 'DLLs', 'tcl86t.dll'), 'text.txt'],
            'include_msvcr': True,
            }},
        executables = [Executable("main.py", base="Win32GUI")]
        )

有关它为什么会这样做的任何想法? 提前谢谢!!

1 个答案:

答案 0 :(得分:1)

此问题的更新。 经过大量不同的配置(我甚至尝试使用pyinstaller而不是cx_freeze),问题出现在脚本或冻结过程本身,但事实上,正如可执行文件所要求的那样在文件上写入这与给予可执行文件的权限相冲突。

这意味着可执行文件无法在文件上写入,程序会停止但不会生成错误消息(甚至不会在cmd窗口中运行它)。 我将创建一个新的专用问题,然后我将在此处发布链接。