2013-11-23 24 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是一個圖形程序,那麼您很可能需要做一些更復雜的事情。

相關問題