2014-12-01 114 views
0

我需要使用多處理模塊(而不是子進程,因爲我需要使用管道)來執行shell命令作爲新的子進程。目前我使用的是:如何在Python中的子進程中執行shell命令?

p = subprocess.Popen(subprocess_command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, env=parent_env) 

其中subprocess_command是一個shell命令(它運行帶有參數的Python腳本)和parent_env是當前環境設置不同的環境變量(LD_PRELOAD)。使用多處理模塊的等價物是什麼?子進程(Python腳本)需要能夠回到父進程。

+1

嗯,你真的不這樣做有多處理...通常...多處理是用於調用腳本中的方法...我認爲subprocess.P開放不會以相同的方式綁定到GIL,如果這就是你所擔心的... – 2014-12-01 23:01:09

+0

謝謝喬蘭。我應該寫我爲什麼要這樣做 - 基本上我正在創建一個子進程的原因是,它可以有一個不同的C函數庫預加載(因此LD_PRELOAD)。我不知道有什麼方法可以讓Popen在執行過程中與其父進行通信,這就是爲什麼我正在查看多處理模塊。 – 2014-12-01 23:05:34

+1

你肯定可以從方法 – 2014-12-01 23:07:41

回答

1

這將演示如何獲得流輸出回從POPEN

file1.py

import time,os 
while True: 
    print "OK ?"+os.environ["LD_PRELOAD"] 
    time.sleep(1) 

file2.py

import os 
os.environ["LD_PRELOAD"] = "5" 
p = subprocess.Popen(subprocess_command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, env=os.environ) 
p.start() 
for line in iter(p.stdout.readline, b''): 
    print line 
    time.sleep(0.6) 
相關問題