在python中,并行运行可执行文件.exe,而无需等待.exe完成

时间:2019-06-16 20:22:06

标签: python parallel-processing subprocess execution

这只是一个示例,但是可能会出现更多情况。假设您有一个来自“ myscript.py”文件的可执行文件,并且具有无限的while-true,但这实际上是从文件中提取的条件,

# myscript.py file to be executed..

bool_condition = True
while bool_condition :
    bool_condition = pickle.load(open('file_condition.p','rb'))

    # -- script lines under while-condition -- #

# endwhile bool_condition 

原则上是无限的,除非另一个脚本更改了file_condition.p的内容。现在考虑一个GUI,可执行文件的激活来自按下按钮,而可执行文件的停止也来自按钮操作,因此,如果您按下停止按钮,condition.p的内容也会改变,因此“ bool_condition”变量从True变为False,因此执行停止。

关键是当按下开始按钮时,有一行在不等待该行执行结束的情况下运行“ myscript”的执行(因为否则启动按钮会冻结并且您无法按停止键-按钮)。我知道如何从python文件“ myscript.py”文件中执行无等待并行执行,

pid = subprocess.Popen([os.sys.executable, "myscript.py"], 
      stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)

但是从* .exe文件“ myscript.exe”无法正常工作

# 1st try..

pid = subprocess.Popen([os.sys.executable, "myscript.exe"], 
      stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)

# 2nd try..

pid = subprocess.Popen(os.system(myscript.exe), stdout=subprocess.PIPE, 
      stderr=subprocess.PIPE, stdin=subprocess.PIPE)

对我来说,不可能认为Python无法执行* .exe文件的无等待并行执行(即不像os.sys(myscript.exe)那样等待执行结束)。实际上Python能够做到吗?

1 个答案:

答案 0 :(得分:1)

尝试:

pid = subprocess.Popen(["myscript.exe"], stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)

将绝对路径传递给“ myscript.exe”也将使整个调用更加安全。

通过将os.sys.executable作为第一个参数传递给Popen,可以有效地调用python。如果您要启动python脚本,但是exe文件不是python scrypt,这很好,这就是为什么它不起作用的原因。