2013-11-23 26 views
0

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

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

这里是我有:

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) 
+1

'Tagger.exe'是否通过它的stdin接受新文件,即它是否工作:'echo filename.mp4 | Tagger.exe'?如果确实如此,则可以使用单个进程来处理多个媒体文件。 – jfs

+0

@ J.F.Sebastian - 感谢repsonse!我在使用MetaX的时候,当我写这个文件时并没有通过'stdin'处理文件,我现在已经使用AtomicParlsey,现在一切都只是桃色。谢谢! – hammus

回答

1

它为你调用外部命令不是当地的Python代码来生成一个新的进程。但是你可以,如果你想通过调用p.wait()

+0

每次都不需要产生新的进程,例如,子进程可以接受来自其标准输入的新文件。 – jfs

0

subprocess.Popen总是打开一个新进程(这是它的目的)来等待进程完成。您需要确定Tagger.exe如何允许其他程序以编程方式请求它打开一个新文件。在最简单的情况下,你可以简单地通过stdin进行通信(其中你需要设置stdin和可能的标准输出为PIPE)。但是,您的程序可能需要其他一些进程间通信(IPC)方法。比如套接字,共享内存等。我不熟悉Windows上的方法,但如果Tagger是一个图形程序,那么您很可能需要做一些更复杂的事情。

相关问题