2015-10-21 55 views

回答

3

對於python-2.7,參數不存儲在版本3.3中。你必須做的是記住它們或者做一個解決方法。

一種方法是從Popen或簡單地圍繞Popen寫的包裝寫你自己的繼承:

from subprocess import _Popen 

def Popen(*args, **kwds): 
    res = _Popen(*args, **kwds) 

    if not hasattr(res, "args"): 
     res.args = args[0] 

    return res 

當然,你可以存儲所有的位置和關鍵字參數,如果你想。在3.3之前args屬性沒有被使用,但之後它是如此,你可能想要保護,因爲如上所示。

你甚至可以做一次檢查(啓動時)並使用一些猴子補丁。下面是一個繼承的例子:

from sys import version 
import subprocess 

class Popen(subprocess.Popen): 
    def __init__(self, *args, **kwds): 
     subprocess.Popen.__init__(self, *args, **kwds) 
     self.args = args[0] 

if version[0] < 3 or (version[0]==3 and version[1] < 3): # pre 3.3 
    subprocess.Popen = Popen 
3

如果你使用Python 3,command.args是最簡單的方法:

from subprocess import Popen 
command = Popen(['ls', '-l']) 

print command.args 

輸出:

['ls', '-l'] 

注意輸出是一個列表。

+0

哦!我得到以下內容:AttributeError:'Popen'對象沒有屬性'args'你正在使用哪種版本的python? – Har

+0

@哈哈,我正在使用Python 3.5。對不起,我會編輯我的答案;) –

+1

@哈爾,我剛剛離開。似乎skyking已經發布了正確的答案。 –

0

我有時這樣做!

import subprocess, 
cmd = ["ls", "-a" ] 
proc = subprocess.Popen(cmd, stdout = subprocess.PIPE) 
stdout = proc.communicate()[0]