【问题标题】:how to launch a executable in python without blocking the python execution如何在不阻塞python执行的情况下在python中启动可执行文件
【发布时间】:2012-02-29 16:53:40
【问题描述】:

在 linux 中,我有一个可执行文件,应该像这样运行: ./a.exe 输入数据

我想在我的 python 脚本中启动这个可执行文件,但我不想阻止其余的 python 代码。

我试过这样的东西,但是

# launch sensor node
def launchA():
    subprocess.Popen(["Path/a.exe", inputdata])

if __name__ == '__main__':
    p = multiprocessing.Process(target=launchA,args=())
    p.start()
    print("sensorlaunched")

但是,luanchA 进程仍然会阻塞打印功能。

我的代码出了什么问题?谢谢!

【问题讨论】:

  • 您在 Linux 二进制文件上使用过.exe 扩展?那是异端!

标签: python linux subprocess multiprocessing


【解决方案1】:

您正在做的只是矫枉过正:您正在使用multiprocessing 创建一个进程来管理使用subprocess 创建的进程。只需单独使用subprocess

p = subprocess.Popen(["Path/a.exe", inputdata])

现在p 是一个引用正在运行的a.exe 进程的句柄,您的脚本可以继续执行它正在执行的操作。

【讨论】:

  • 我只是累了"p = subprocess.Popen(["Path/a.exe", inputdata])",但是它仍然阻塞了打印功能...... a.exe抓住了终端,而且我没有看到 print("hello") 函数被执行...
  • @XingFan: a.exe 和原始进程写入同一个终端,但没有进程“抓取”它。让两个同时运行的进程写入同一个终端肯定会以不确定的方式混合两个数据流,但这确实意味着原始进程会阻塞。
  • 我c。谢谢!但是我尝试在命令中添加“&”,像这样 p = subprocess.Popen(["Path/a.exe", inputdata],"&") 释放终端,但我仍然看不到打印功能被执行…………
  • @XingFan:& 没有做任何事情。没有任何变化的事实意味着问题不在于subprocess
  • @XingFan:没有所谓的“释放终端”。终端不属于任何进程。并且将随机的"&" 作为参数添加到Popen() 会导致错误。
猜你喜欢
  • 1970-01-01
  • 2011-01-19
  • 2018-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-05
  • 1970-01-01
相关资源
最近更新 更多