2015-06-14 68 views
2

考慮下面的類:如何在Python中的__init __()部分定義一個子進程?

import subprocess 

class Fruits(): 
    def __init__(self): 
     self.TERMINAL_WIDTH = 80 

    def start(self): 
     p = subprocess.Popen(["mplayer", "other", "args"]) 
     print "Subprocess started..." 

此代碼的工作。

爲了更好地瞭解最佳編碼實踐,我使用Python的PEP 8 linter。該棉短絨抱怨行

p = subprocess.Popen(["mplayer", "other", "args"]) 

:棉短絨的說,是因爲我們定義一個變量(p),它可能應該去的__init__()方法來代替。

我想知道如何做到這一點,但。如果我以當前形式將該行轉移到__init__(),則當Fruits()被實例化時,子流程將開始運行,這不是我想要的。你能幫我嗎?

+0

不知道爲什麼棉短絨會告訴你這一點,除非它被分配到'self'屬性,但'p'是本地這裏。在任何情況下都知道棉絨可能是錯的,在這一點上,你禁用了棉絨(對於那條線)。 –

+0

你能告訴我們a)你正在使用什麼棉絨布和b)確切的錯誤信息(確保你最小的例子產生了這個錯誤信息)。 –

回答

0

首先你要創建一個局部變量。這是可以的,但當方法執行完成時會丟失。

你很可能想要一個實例變量。然後,生產線必須是這樣的:

self.p = subprocess.Popen(["mplayer", "other", "args"]) 

而且p是名稱的一個糟糕的選擇,你應該例如使用的東西越長,mplayer_proc

然後有一個約定來初始化__init__中的所有實例變量,這在使用IDE時不是必需的,但非常有用。你不需要給它一個最終價值。如果你有什麼可存儲在那裏,而初始化,只是將其設置爲None

class Fruits(): 
    def __init__(self): 
     self.TERMINAL_WIDTH = 80 
     self.mplayer_proc = None 
相關問題