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