Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Sublime Text 3中运行Python时如何删除输出缓冲_Python_Sublimetext3 - Fatal编程技术网

在Sublime Text 3中运行Python时如何删除输出缓冲

在Sublime Text 3中运行Python时如何删除输出缓冲,python,sublimetext3,Python,Sublimetext3,在构建Python 3脚本时,如何从Sublime Text 3中删除输出缓冲?我想实时输出 我正在使用SumpleText3和Anaconda插件、Python3.6和LinuxMint18。当我使用control-b运行简单脚本时: print('hello') 我在一个称为“构建输出”的单独窗口中获得即时输出。当我使用具有重复输出的脚本时,例如: from time import sleep count = 0 print('starting') while True: pri

在构建Python 3脚本时,如何从Sublime Text 3中删除输出缓冲?我想实时输出

我正在使用SumpleText3和Anaconda插件、Python3.6和LinuxMint18。当我使用control-b运行简单脚本时:

print('hello')
我在一个称为“构建输出”的单独窗口中获得即时输出。当我使用具有重复输出的脚本时,例如:

from time import sleep

count = 0
print('starting')
while True:
    print('{} hello'.format(count))
    count += 1
    sleep(0.5)
最初,我在“构建输出”中得到一个空白屏幕。一段时间后,它填充了几百行输出。看起来输出正在被缓冲。当缓冲区已满时,它会立即将所有内容输出到“生成输出”屏幕

编辑 升华文本允许自定义构建配置。默认的Python构建是针对Python2的。我输入了Python3的构建配置,但没有输入-u标志。修复方法是在Python3构建中添加-u标志

文件:Python3.sublime-build

{
    "shell_cmd": "/usr/bin/env python3 -u ${file}",
    "selector": "source.python",
    "file_regex": "^(...*?):([0-9]*):?([0-9]*)",
    "working_dir": "${file_path}",
}

保存在升华安装/Data/Packages/User/Python3中。升华构建默认情况下,
exec
命令用于在构建系统中执行命令,
exec
命令根本不缓冲输出。中有更多信息(它还提供了执行行缓冲的
exec
版本),但简而言之,
exec
启动一个线程来处理
stdout
,另一个线程来处理
stderr
,两个线程都会在获得数据后立即将其转发到面板

{
    "shell_cmd": "/usr/bin/env python3 -u ${file}",
    "selector": "source.python",
    "file_regex": "^(...*?):([0-9]*):?([0-9]*)",
    "working_dir": "${file_path}",
}
因此,像您在这里描述的问题通常是由程序自己进行缓冲引起的。根据您使用的语言和平台,缓冲可能会以意想不到的方式发生变化:

例如,请参阅Linux下的中的以下文本:

流stderr是无缓冲的。当流stdout指向一个终端时,它被行缓冲。在调用fflush(3)或exit(3)或打印换行符之前,部分行不会出现。这可能会产生意外的结果,尤其是在调试输出时

在一般情况下,这个问题的解决方案是修改程序本身,以确保它不进行缓冲,而如何进行缓冲取决于所使用的语言和所使用的平台。它可以像设置环境变量一样简单,也可以像启动代码一样复杂,以确保无论环境如何,缓冲都按预期设置

在Python的特定情况下,解释器的
-u
命令行参数告诉Python保持事物不缓冲:

-u     : unbuffered binary stdout and stderr; also PYTHONUNBUFFERED=x
         see man page for details on internal buffering relating to '-u'
升华附带的
Python.sublime build
将此参数用于
Python
命令,以确保输出是无缓冲的,并且使用该构建系统可以按照示例程序的预期工作


我不使用Anaconda软件包,因此我不确定它是否提供自己的构建系统,但您可能需要检查正在使用的build命令,以确保它使用
-u

Sublime不会将输出缓冲到面板;事实上,如果您同时输出到
stdout
stderr
,这两个命令将在行间混合在一起。我不使用那个软件包;它是否在
python
命令中指定了
-u
,以告诉python不要缓冲输出?我在构建配置中遗漏了-u标志。谢谢你的提示。把这个作为答案,我会接受的。升华文本允许自定义构建配置。默认的Python构建是针对Python2的。我输入了Python3的构建配置,但没有输入-u标志。