我有一个python
脚本,可以输出一些5位数字。我通过Qprocess
调用此脚本并读取我稍后使用的输出。
在Windows上,脚本打包成一个py2exe
的可执行文件,并调用可执行文件。
当我从终端运行可执行文件或脚本时,输出正常,但是当我通过Qprocess
调用可执行文件时,我得到了垃圾。
我打印的脚本部分就像这样
print number
sys.stdout.flush()
我尝试用print
和sys.stoud.write(number)
替换sys.stoud.write(number + '\n')
,但没有成功。
我的py2exe
脚本是:
setup(
console=['number.py'],
options = {
'py2exe' : {
'bundle_files': 1,
'compressed': True
}
},
zipfile = None
)
我也尝试将console=['number.py']
更改为windows=['number.py']
,
也没有成功。
我知道-u
的{{1}}切换,但我需要将其作为可执行文件,我也不确定这是否会起作用。
我在搜索引擎优化和谷歌上都进行了搜索,但是每个人都建议使用python
,这对我的情况来说还不够。
当我使用记录器检查输出时,我可以看到输出的大小不同,范围从6个字符到11加1,然后再从6到11,依此类推。
我使用的是Python 2.7,Qt是4.8,我在Windows 7和8上测试过。在Linux上,一切运行顺利。
我已经浪费了将近一整天的时间,我将不胜感激任何帮助
我在使用sys.stdout.flush()
时也尝试使用\r\n
,但这也不起作用。
尝试将其设置为有效,我使用sys.stoud.write()
开关< python
>调用-u
脚本,将调用替换为可执行文件。它似乎工作正常,输出的大小总是6。
这是为什么?
查看py2exe提供的options,我看到python -u myscript.py
选项表示当unbuffered
无缓冲True
和stdout
时({1}}我认为默认情况下是无缓冲的)。
unbuffered:如果为true,则使用无缓冲的二进制stdout和stderr
我在stderr
中设置'unbuffered': True
,这也不起作用。
答案 0 :(得分:0)
您可能需要添加š
。
参考:os.fsync(fd)
强制将filedescriptor fd文件写入磁盘。在Unix上,这会调用本机fsync()函数;在Windows上,MS _commit()函数。
如果您从Python文件对象f开始,首先执行f.flush(),然后执行os.fsync(f.fileno()),以确保与f关联的所有内部缓冲区都写入磁盘