C# 为什么重定向的标准输出会在流程完成后出现?

C# 为什么重定向的标准输出会在流程完成后出现?,c#,python,process,C#,Python,Process,我正在使用Visual Studio 2015和.NET framework 4.7.2。我已经建立了一个简单的测试程序,它在C#中执行一个外部程序。该程序是一个Python脚本,只需每隔0.5秒向stdout打印一些字符串。我想在我的C#应用程序中阅读这个子进程的标准 该程序基本上可以运行,但我只是在子进程退出前不久才获得Python脚本的输出。为了获得更具响应性的行为,我需要做哪些更改,即在Python脚本将输出写入stdout后,每0.5秒获取一次输出 这是我的C代码: 下面是我的Pyth

我正在使用Visual Studio 2015和.NET framework 4.7.2。我已经建立了一个简单的测试程序,它在C#中执行一个外部程序。该程序是一个Python脚本,只需每隔0.5秒向stdout打印一些字符串。我想在我的C#应用程序中阅读这个子进程的标准

该程序基本上可以运行,但我只是在子进程退出前不久才获得Python脚本的输出。为了获得更具响应性的行为,我需要做哪些更改,即在Python脚本将输出写入stdout后,每0.5秒获取一次输出

这是我的C代码:

下面是我的Python脚本:

import time
import sys
import logging


logging.basicConfig(level=logging.ERROR)

if __name__ == '__main__':
    count = 0
    while True:
        print('PYTHON: {}'.format(count))
        time.sleep(0.5)
        count+=1
        if count>=25:
            break
更新:我上传了这个小项目。

该函数采用一个flush参数,该参数控制是否刷新缓冲输出

flush的默认值为
False
,这意味着flush由写入的任何文件
print
控制(例如,
sys.stdout

将flush设置为True以强制立即打印

print('PYTHON: {}'.format(count), flush=True)
函数接受一个flush参数,该参数控制是否刷新缓冲输出

flush的默认值为
False
,这意味着flush由写入的任何文件
print
控制(例如,
sys.stdout

将flush设置为True以强制立即打印

print('PYTHON: {}'.format(count), flush=True)

谢谢你的回答,但不幸的是,行为还是一样。我只是在进程退出前不久才在C#应用程序中得到标准输出(然后它立即打印整组消息)。我上传了这个项目(cp.到了链接的原始帖子的底线)。对不起,忘了提到我正在使用Python 2.7.15。我想这就是为什么
flush=True
不起作用的原因,我只是使用了
True
。查看
print()
的2.7.15 API定义,我找不到flush参数。2.7.15中是否有用于打印的刷新功能?现在使用Python 3.7.2进行检查,它工作正常。非常感谢。在Python2中,您需要从uuu future uuuu导入print u函数执行
——旧的
print
语句没有刷新功能(尽管您仍然可以直接刷新
sys.stdout
)。非常感谢您的帮助!谢谢你的回答,但不幸的是,行为还是一样。我只是在进程退出前不久才在C#应用程序中得到标准输出(然后它立即打印整组消息)。我上传了这个项目(cp.到了链接的原始帖子的底线)。对不起,忘了提到我正在使用Python 2.7.15。我想这就是为什么
flush=True
不起作用的原因,我只是使用了
True
。查看
print()
的2.7.15 API定义,我找不到flush参数。2.7.15中是否有用于打印的刷新功能?现在使用Python 3.7.2进行检查,它工作正常。非常感谢。在Python2中,您需要从uuu future uuuu导入print u函数
执行
——旧的
print
语句没有刷新功能(尽管您仍然可以直接刷新
sys.stdout
)。非常感谢您的帮助!