标签: flush

从stdin读取标准输出?

当连接到终端时,stdout是行缓冲的,但我记得在某处读取(至少从stdin)将自动刷新stdout.我使用的所有C实现都已经完成了,但我现在无法在标准中找到它.

它确实有意义,它是这样的,否则代码如下:

printf("Type some input: ");
fgets(line, sizeof line, stdin);
Run Code Online (Sandbox Code Playgroud)

需要一个额外的 fflush(stdout);

那么stdout肯定会在这里刷新吗?

编辑:

正如几个回复所说,标准中似乎无法保证我的示例中的stdout输出将在从stdin读取之前出现,但另一方面,这个意图在(我的免费草稿副本)中说明了标准:

交互设备的输入和输出动态应按照7.19.3的规定进行.这些要求的目的是尽快出现无缓冲或行缓冲输出,以确保在程序等待输入之前实际出现提示消息.

(ISO/IEC 9899:TC2委员会草案 - 2005年5月6日,第14页).

所以似乎没有保证,但无论如何它可能适用于大多数实现.(著名遗言...)

c stdin stdout flush

15
推荐指数
2
解决办法
4490
查看次数

从Windows CLI刷新磁盘写入缓存

有没有人知道如何从Windows命令行刷新当前目录(或任何给定文件或目录)的缓存管理器中的磁盘写入缓存数据?

windows caching disk flush command-line-interface

14
推荐指数
1
解决办法
1万
查看次数

php flush无法正常工作

<?php
for($i=0;$i<20;$i++)
{
    echo 'printing...<br />';
    ob_flush();
    flush();

    usleep(300000);
}

?>
Run Code Online (Sandbox Code Playgroud)

包含以下代码的网址:http://domainsoutlook.com/sandbox/delayed.php

我有一个专用服务器,所以我可以进行更改.我正在运行apache和nginx作为代理服务器.

php flush

14
推荐指数
4
解决办法
4万
查看次数

使用Cocoa Lumberjack日志框架立即刷新日志语句,即NSLog刷新到控制台的方式

许多iOS开发人员已经找到了Cocoa Lumberjack Logging框架来满足简单NSLog语句不需要的需求.它让人想起Java世界中的Log4J.

无论如何,我已经为Lumberjack编写了自己的自定义格式化程序,但我没有看到任何关于如何立即刷新日志语句的文档.

例如,如果我正在浏览调试器并且我点击了一个NSLog()语句,它会立即将日志语句刷新到控制台.这是我想从DDLogVerbose()Lumberjack 的电话中得到的行为.

现在,我回过头来将这些语句更改为NSLog()语句,如果我希望它们在我调试一段代码时立即吐出来.随着伐木工人如此强大,我开始认为有一种方法可以将其配置为毫不拖延地进行冲洗.

有谁知道如何做到这一点?

logging flush nslog ios lumberjack

14
推荐指数
1
解决办法
6342
查看次数

使用python从子进程读取输出

上下文

我正在使用该subprocess模块从python启动进程.我希望能够在写入/缓冲后立即访问输出(stdout,stderr).

  • 该解决方案必须支持Windows 7.我也需要Unix系统的解决方案,但我怀疑Windows案例更难以解决.
  • 该解决方案应该支持Python 2.6.我目前仅限于Python 2.6,但仍然赞赏使用更高版本的Python的解决方案.
  • 解决方案不应使用第三方库.理想情况下,我会喜欢使用标准库的解决方案,但我愿意接受建议.
  • 解决方案必须适用于任何流程.假设无法控制正在执行的进程.

儿童过程

例如,假设我想运行一个名为counter.pyvia a 的python文件subprocess.内容counter.py如下:

import sys

for index in range(10):

    # Write data to standard out.
    sys.stdout.write(str(index))

    # Push buffered data to disk.
    sys.stdout.flush()
Run Code Online (Sandbox Code Playgroud)

父流程

负责执行该counter.py示例的父进程如下:

import subprocess

command = ['python', 'counter.py']

process = subprocess.Popen(
    cmd,
    bufsize=1,
    stdout=subprocess.PIPE,
    stderr=subprocess.PIPE,
    ) 
Run Code Online (Sandbox Code Playgroud)

问题

使用该counter.py示例,我可以在流程完成之前访问数据.这很棒!这正是我想要的.但是,删除该sys.stdout.flush()调用会阻止在我想要的时间访问数据.这是不好的!这正是我不想要的.我的理解是flush()调用强制将数据写入磁盘,在将数据写入磁盘之前,它只存在于缓冲区中.请记住,我希望能够运行任何进程.我不希望这个过程执行这种刷新,但我仍然期望数据可以实时(或接近它).有没有办法实现这个目标?

关于父进程的快速说明.您可能会注意到我正在使用bufsize=0线路缓冲.我希望这会导致每行的磁盘刷新,但它似乎不会那样工作.这个论点如何运作?

您还会注意到我正在使用subprocess.PIPE.这是因为它似乎是在父进程和子进程之间生成IO对象的唯一值.我通过查看模块中的Popen._get_handles方法得出了这个结论subprocess(我在这里指的是Windows定义).有两个重要的变量,c2preadc2pwrite …

python buffer subprocess pipe flush

14
推荐指数
1
解决办法
2621
查看次数

c ++ std :: ofstream flush()但不是close()

我在MacOSX上.

在我的应用程序的记录器部分,我正在将数据转储到文件中.

假设我有一个全局声明 std::ofstream outFile("log");

在我的日志代码中我有:

outFile << "......." ;
outFile.flush();
Run Code Online (Sandbox Code Playgroud)

现在,假设我的代码在flush()发生后崩溃了; 是否保证写入磁盘outFile之前写入的东西flush()(请注意,我不会调用a close()).

谢谢!

c++ flush buffering ofstream

13
推荐指数
2
解决办法
7027
查看次数

使用flush()方法对每100行10 000个慢速事务进行处理

我有一个示例项目使用spring-bootwith spring-data-jpapostgres db一个表.

我正在尝试将INSERT10 000条记录循环到表中并测量执行时间 - 为每100条记录启用或禁用类的flush()方法EntityManager.

预期的结果是启用flush()方法的执行时间比使用禁用的方法要少得多,但实际上我得到了相反的结果.

UserService.java

package sample.data;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserService {
    @Autowired
    UserRepository userRepository;

    public User save(User user) {
        return userRepository.save(user);
    }
}
Run Code Online (Sandbox Code Playgroud)

UserRepository.java

package sample.data;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface UserRepository extends JpaRepository<User, Long> { }
Run Code Online (Sandbox Code Playgroud)

Application.java

package sample;

import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.transaction.annotation.Transactional;

import sample.data.User; …
Run Code Online (Sandbox Code Playgroud)

java flush entitymanager spring-data-jpa spring-boot

13
推荐指数
2
解决办法
1449
查看次数

Python3 sleep()问题

我在Python 3.1上编写了一个简单的程序,我偶然发现了这个:

如果我在IDLE上运行它,它按预期工作 - 打印"Initializing."然后添加两个点,每秒一个,并等待输入.

from time import sleep

def initialize():
    print('Initializing.', end='')
    sleep(1)
    print(" .", end='')
    sleep(1)
    print(" .", end='')
    input()

initialize()
Run Code Online (Sandbox Code Playgroud)

问题是,当我双击.py来执行文件时,它运行在python.exe而不是pythonw.exe上,并发生奇怪的事情:它一直加入,sleep()即让我等待2秒,然后打印整个字符串Initializing. . .一下子.为什么会这样?有没有办法避免终端发生这种情况?如果我在windows和linux中使用IDLE,它工作正常.

python sleep flush python-3.x

12
推荐指数
2
解决办法
2万
查看次数

python打印功能实时

我最近切换操作系统,并使用更新的Python(2.7).在我的旧系统上,我曾经能够即时打印.例如,假设我有一个计算密集的for循环:

for i in range(10):
  huge calculation
  print i
Run Code Online (Sandbox Code Playgroud)

然后当代码完成每次迭代时,它会打印出来 i

但是,在我当前的系统上,python似乎缓存了标准输出,以便终端空白几分钟,然后打印:

1
2
3

简而言之.然后,再过几分钟,它会打印出来:

4
5
6

等等.如何在print声明到达声明后立即进行python打印?

python printing stdout flush

12
推荐指数
2
解决办法
7141
查看次数

如何显式“刷新”tqdm 进度条?

我经常看到,tqdm进度条被其他打印件打破,例如:

 93%|??????????| 28/30 [00:02<00:00, 13.44it/s]Subject S9
100%|??????????| 30/30 [00:02<00:00, 12.94it/s]
 93%|??????????| 28/30 [00:02<00:00, 11.49it/s]Pickling...
100%|??????????| 30/30 [00:02<00:00, 11.47it/s]
Run Code Online (Sandbox Code Playgroud)

这里应该只显示 2 个进度条。尽管如此成功,打印一些文本会以很高的百分比中断进度条,其余的会在之后打印出来。

是否可以以某种方式“刷新”进度条?

我读过,默认情况下会tqdm打印stderr并尝试刷新它

sys.stderr.flush()
Run Code Online (Sandbox Code Playgroud)

但这没有帮助。

以上都是在PyCharm控制台模拟中发生的,所以可以与此相关。

python flush pycharm tqdm

12
推荐指数
3
解决办法
2万
查看次数