首先,我必须说谢谢!这个网站和这里提出的问题是一个很好的信息来源。
原谅我的英语,我不习惯写作和/或表达长篇小说。
好吧,现在我暴露了我的麻烦:我正在编写一个处理矩阵的python程序,用户输入组装它们所需的一些数据并执行一些矩阵操作。在计算结束时,程序必须在.txt文件中写入计算结果。必须说当我在python的shell中运行程序时,一切都正常工作。
现在,因为我想独立分发这个程序(换句话说,程序在不调用python的shell的情况下运行),我转移到W7并安装了cx_Freeze以及所需的所有东西。运行编译命令并且不会出错。运行程序并且没有错误(我认为)但是没有创建.txt文件!
我在主程序中显示一段代码(变量名是西班牙语),用于处理文件写入:
...
reporte = open(r'reporte_%s.txt' % g_fecha, 'w')
reporte.write('+' + '-'*39 + '+\n')
reporte.write('|' + ' '*10 + 'PROGRAMA CERCHAS 2D' + ' '*10 + '|\n')
reporte.write('|' + ' '*39 + '|\n')
reporte.write('|' + ' '*7 + 'Software didáctico para ' + ' '*8 + '|\n')
reporte.write('|' + ' '*3 + 'análisis de cerchas estáticamente' + ' '*3 + '|\n')
reporte.write('|' + ' '*5 + 'determinadas e indeterminadas' + ' '*5 + '|\n')
reporte.write('|' + ' '*39 + '|\n')
reporte.write('|' + ' '*14 + 'versión 1.0' + ' '*14 + '|\n')
reporte.write('|' + ' '*5 + 'Desarrollado por: Felipe Pérez' + ' '*4 + '|\n')
reporte.write('|' + ' '*3 + 'Tesis de grado de Ingeniería Civil' + ' ' *2 + '|\n')
reporte.write('+' + '-'*39 + '+\n\n')
reporte.write('1) Matriz de continuidad global: mcg\n')
with reporte as salida:
pprint(mcg, stream = salida)
reporte = open(r'reporte_%s.txt' % g_fecha, 'a')
reporte.write('\n2) Matriz de continuidad efectiva: mcn\n')
with reporte as salida:
pprint(mcn, stream = salida)
reporte = open(r'reporte_%s.txt' % g_fecha, 'a')
reporte.write('\n3) Matriz de continuidad de apoyos: mca\n')
with reporte as salida:
pprint(mca, stream = salida)
reporte = open(r'reporte_%s.txt' % g_fecha, 'a')
reporte.write('\n4) Matriz de rigidez de los elementos: ke\n')
with reporte as salida:
pprint(ke, stream = salida)
reporte = open(r'reporte_%s.txt' % g_fecha, 'a')
reporte.write('\n5) Matriz de rigidez efectiva: k_ef = (mcn)t*ke*mcn\n')
with reporte as salida:
pprint(k_ef, stream = salida)
reporte = open(r'reporte_%s.txt' % g_fecha, 'a')
reporte.write('\n6) Vector de fuerzas globales: F_gl\n')
with reporte as salida:
pprint(frz_gb, stream = salida)
reporte = open(r'reporte_%s.txt' % g_fecha, 'a')
reporte.write('\n7) Vector de fuerzas efectivas: F_ext\n')
with reporte as salida:
pprint(frz_ef, stream = salida)
reporte = open(r'reporte_%s.txt' % g_fecha, 'a')
reporte.write('\n8) Vector de desplazamientos: u = inversa(k_ef)*F_ext\n')
with reporte as salida:
pprint(u, stream = salida)
reporte = open(r'reporte_%s.txt' % g_fecha, 'a')
reporte.write('\n9) Vector de fuerzas en barras: F_bar = ke*mcn*u\n')
with reporte as salida:
pprint(f_bar, stream = salida)
reporte = open(r'reporte_%s.txt' % g_fecha, 'a')
reporte.write('\n10) Vector de reacciones en los apoyos: Reac = (mca)t*F_bar\n')
with reporte as salida:
pprint(reac, stream = salida)
reporte.close()
现在我显示整个setup.py文件代码:
import sys
from cx_Freeze import setup, Executable
includes = ['PyQt4.QtCore', 'PyQt4.QtGui', 'sip', 'pyqtgraph.graphicsItems','numpy','datetime','pprint'"atexit"]
excludes = ['_gtkagg', '_tkagg', 'bsddb', 'curses', 'email', 'pywin.debugger',"cvxopt",
'pywin.debugger.dbgcon', 'pywin.dialogs', 'tcl','tables',
'Tkconstants', 'Tkinter', 'zmq','PySide','pysideuic','scipy','matplotlib']
if sys.version[0] == '2':
# causes syntax error on py2
excludes.append('PyQt4.uic.port_v3')
base = None
if sys.platform == "win32":
base = "Win32GUI"
build_exe_options = {"excludes": excludes,
"includes":includes,"include_msvcr":True,
'compressed':True,'copy_dependent_files':True,'create_shared_zip':True,
'include_in_shared_zip':True,'optimize':2}
setup( name = "Test Software",
version = "0.1",
description = "Proyecto de tesis Felipe Perez",
options = {"build_exe": build_exe_options},
executables = [Executable("maincerchas.py", base=base)])
我认为问题可能是一个缺失的模块,您的想法是什么?
感谢阅读和快乐编码!
答案 0 :(得分:1)
尝试使用绝对路径。
reporte = open(r' D:\ ... \ reporte_%s.txt'%g_fecha,' w')
答案 1 :(得分:1)
首先,我要感谢快速反应。它为我的项目提供了一些帮助。
思考几分钟后,我决定在W7上运行程序(我在CAELinux,GREAT发行版上开发了它)和VOILA!出现错误:
Traceback (most recent call last):
File "maincerchas.py", line 300, in acc_ejecutar
reporte = open(r'reporte_%s.txt' % g_fecha, 'w')
IOError: [Errno 22] invalid mode ('w') or filename: 'reporte_2014-08-07 18:36:37.9470000.txt'
现在我要挖掘这个错误,并最终发布解决方案。
谢谢你,编码愉快!
答案 2 :(得分:1)
毕竟,似乎所有麻烦都是由Windows保留字符造成的(我试图使用冒号":"这是Windows上的保留字符)
我刚刚将这一行添加到我的代码中并且运行完美
g_fecha = g_fecha.replace(':', '_')
希望它会有所帮助。快乐的编码!