这只是一个示例,但是可能会出现更多情况。假设您有一个来自“ 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能够做到吗?
答案 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,这很好,这就是为什么它不起作用的原因。