我只能通過使用cURL檢索我的數據,我認爲子進程是更簡單的方法,但我無法將數據放入變量中。如何將子進程的結果放入變量
例如像這樣
data = subprocess.call('curl "URL" -X GET', shell=True)
有沒有簡單的方法通過Python做到這一點?
我只能通過使用cURL檢索我的數據,我認爲子進程是更簡單的方法,但我無法將數據放入變量中。如何將子進程的結果放入變量
例如像這樣
data = subprocess.call('curl "URL" -X GET', shell=True)
有沒有簡單的方法通過Python做到這一點?
如果你想與子要做到這一點,並希望調用的結果,那麼你正在尋找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
,你會得到文字迴應。我建議你閱讀文檔以瞭解如何使用它。這是一個功能齊全的功能齊全的圖書館。
我建議通過文檔查找所有其他你想要的東西。
試試這個:
data = subprocess.Popen(command, shell=True, stdout = subprocess.PIPE, stderr=subprocess.PIPE)
std_out, std_err = data.communicate()
該頁面還包含有關爲什麼shell=True
是危險的描述。值得一讀
編輯:
這是做你想做的事情的艱辛的道路。它的工作原理,我發佈了一個替代品,但我建議@idjaw回答
以下方法爲我工作。這可能是可用的,如果你需要一個以上的參數運行命令:如下
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
@ J.F.Sebastian謝謝,修正 – Samuel
「我只能通過使用cURL來檢索我的數據」=> err,爲什麼呢?什麼阻止你使用一些Python包? (從stdlib或更高級別的東西,如http://docs.python-requests.org/en/latest/)? –
使用[python bindings for libcurl](http://pycurl.sourceforge.net/)併爲自己節省很多頭痛(包括錯誤處理問題)有什麼問題? – dhke