在Windows窗体和后台进程中运行的Python脚本之间共享变量的优雅方式

在Windows窗体和后台进程中运行的Python脚本之间共享变量的优雅方式,python,winforms,global-variables,Python,Winforms,Global Variables,我试图找到一种优雅的方式,在windows窗体应用程序和后台运行的python脚本之间共享变量。该变量仅用于根据python脚本中长时间运行的进程更新windows窗体中的进度条。更具体地说,windows计时器将每隔n秒触发一次,检查变量,然后更新进度条值。听起来够蠢了吗?我将在下面解释这一点的必要性 我有一个windows应用程序,它允许用户定义一些参数来启动一个长时间运行的进程(python脚本)。在不涉及不必要的细节的情况下,这个长时间运行的过程将在相当长的一段时间内将许多(100k+记

我试图找到一种优雅的方式,在windows窗体应用程序和后台运行的python脚本之间共享变量。该变量仅用于根据python脚本中长时间运行的进程更新windows窗体中的进度条。更具体地说,windows计时器将每隔n秒触发一次,检查变量,然后更新进度条值。听起来够蠢了吗?我将在下面解释这一点的必要性

我有一个windows应用程序,它允许用户定义一些参数来启动一个长时间运行的进程(python脚本)。在不涉及不必要的细节的情况下,这个长时间运行的过程将在相当长的一段时间内将许多(100k+记录)插入sqlite数据库。为了使python脚本的性能尽可能好,我在python脚本的最后才调用sqlite数据库上的commit。在提交之前尝试从windows应用程序(通过System.Data.sqlite)查询sqlite数据库总是会产生0条记录,而不管过程进行得有多远

windows应用程序将知道python进程将插入多少条记录,因此,假设我可以访问python脚本中的记录计数,那么确定进度就足够简单了


我知道我可以用文本文件来实现这一点,但还有更好的方法吗?

最简单的解决方案可能是将python脚本打印到标准输出:比如说,每次处理一个项目时,打印一行,其中的数字表示处理了多少个项目(或百分比)。然后让表单应用程序逐行读取输出,并根据该信息更新progressbar。

如果改用,则可以使用Python中的进度条创建表单并直接操作它


或者,您的Winforms应用程序可以托管脚本并共享变量。

谢谢。尝试使用System.Diagnostic.Process OutputDataReceived事件执行此操作。不幸的是,在进程结束之前,该事件永远不会触发,然后所有消息都会蜂拥而至。您不必使用它:您只需使用
process.StandardOutput.Readline()
(我认为您必须在
ProcessStartInfo
对象上将
RedirectStandardOutput
属性设置为true)即可。希望此链接能帮助其他人: