Python subprocess.call()为每个调用生成新进程

Python subprocess.call()为每个调用生成新进程,python,subprocess,single-instance,Python,Subprocess,Single Instance,我正在尝试将.mp4文件发送到mp4标记应用程序。我的问题是,每次在Windows上调用subprocess.call()或subprocess.Popen()时,都会产生一个新进程 我想要的是在现有进程中打开该文件,如果该进程已在运行。。。这是可能的还是取决于被调用的进程如何处理新的进程调用 以下是我所拥有的: def sendToTagger(self, file): msg = "-- " + self.getDateStamp() + "-- Sending "

我正在尝试将.mp4文件发送到mp4标记应用程序。我的问题是,每次在Windows上调用
subprocess.call()
subprocess.Popen()
时,都会产生一个新进程

我想要的是在现有进程中打开该文件,如果该进程已在运行。。。这是可能的还是取决于被调用的进程如何处理新的进程调用

以下是我所拥有的:

def sendToTagger(self, file):
            msg = "-- " + self.getDateStamp() + "-- Sending " + os.path.basename(file) + " to Tagger...\r\n"
            self.logFile.write(msg)
            print(msg)
            p = subprocess.Popen(['C:\\Program Files (x86)\\Tagger\\Tagger.exe', file], shell=False, stdin=None, stdout=None)

它必须在调用外部命令时生成一个新进程,而不是python代码的本地命令。但是,如果希望等待进程完成,可以调用p.wait()

subprocess.Popen始终打开一个新进程(这就是它的目的)。您需要确定Tagger.exe如何允许另一个程序以编程方式请求它打开新文件。在最简单的情况下,您可以通过stdin与它通信(在这种情况下,您需要将stdin和stdout设置为管道)。但是,您的程序可能需要一些其他进程间通信(IPC)方法。例如套接字、共享内存等。我不熟悉Windows上的方法,但如果Tagger是一个图形程序,则很有可能需要执行更复杂的操作。

Tagger.exe是否通过其标准输入接受新文件,即它是否工作:
echo filename.mp4 | Tagger.exe
?如果是这样,那么您可以使用单个进程来处理多个媒体文件。@J.F.Sebastian-感谢您的回复!昨天我写这篇文章时使用的是MetaX,它不通过stdin处理文件,现在我开始使用AtomicParlsey,一切都很好。谢谢无需每次生成新进程,例如,子进程可以从其stdin接受新文件。