2015-10-12 49 views
1

我只能通過使用cURL檢索我的數據,我認爲子進程是更簡單的方法,但我無法將數據放入變量中。如何將子進程的結果放入變量

例如像這樣

data = subprocess.call('curl "URL" -X GET', shell=True) 

有沒有簡單的方法通過Python做到這一點?

+0

「我只能通過使用cURL來檢索我的數據」=> err,爲什麼呢?什麼阻止你使用一些Python包? (從stdlib或更高級別的東西,如http://docs.python-requests.org/en/latest/)? –

+0

使用[python bindings for libcurl](http://pycurl.sourceforge.net/)併爲自己節省很多頭痛(包括錯誤處理問題)有什麼問題? – dhke

回答

4

如果你想與子要做到這一點,並希望調用的結果,那麼你正在尋找check_output

data = subprocess.check_output(["curl", URL]) 

不過,我建議你使用Python中requests庫你是什麼這樣做。充滿了會讓你的生活更輕鬆的功能。

下面是使用要求上一個簡單的例子:

確認您已經先安裝請求。它不是一個內置的庫。我鏈接的URL將解釋如何做到這一點。

>>> import requests 
>>> d = requests.get("http://www.google.ca") 
>>> print(d) 
<Response [200]> 

您可以從該響應獲得大量數據。如果你做了d.text,你會得到文字迴應。我建議你閱讀文檔以瞭解如何使用它。這是一個功能齊全的功能齊全的圖書館。

我建議通過文檔查找所有其他你想要的東西。

+0

如何使用請求轉換此CURL命令? – Imo

+0

@Imo看看我更新的答案。 – idjaw

+0

是的,我這樣做,但我期待的結果更像{「IOcores數」:1,「IOcores」:{「iocore0」:{「空 - 循環」:「0」,「輪詢週期」:「0 「,」CPU頻率「:」2099917000「,」輪詢循環「:」0「,」輪詢界面數「:」0「,」工作循環「:」4184216「,」紡紗工人「:」YES「,」Total-Core-Cycles「:」4184216「}}}但是我得到 Imo

1

試試這個:

data = subprocess.Popen(command, shell=True, stdout = subprocess.PIPE, stderr=subprocess.PIPE) 
std_out, std_err = data.communicate() 

Docs

該頁面還包含有關爲什麼shell=True是危險的描述。值得一讀

編輯:

這是做你想做的事情的艱辛的道路。它的工作原理,我發佈了一個替代品,但我建議@idjaw回答

0

以下方法爲我工作。這可能是可用的,如果你需要一個以上的參數運行命令:如下

def run_shell_command(cmd, params): 
     cmd_list = [] 
     cmd_list.append(cmd) 
     cmd_list + string.split(params) 
     p = subprocess.Popen(cmd_list, stdout=subprocess.PIPE, stderr=subprocess.PIPE) 
     std_out, std_err = p.communicate() 
     return std_out, std_err 

然後,調用函數:

outp = run_shell_command('curl', '\"URL\" -X GET') 

PS:你don't需要使用shell=True

+0

@ J.F.Sebastian謝謝,修正 – Samuel

相關問題