2017-03-17 49 views
-2

不工作的Python 2.7的Windows腳本我有,我想在redhat 6.7操作系統上運行一個python腳本,但它在不斷失敗。在Unix中

** Python版本:2.7.13(最初它有默認的版本,我有符號鏈接到usr/local/bin/python2.7,不知道它是否已經更改爲2.7,但是當我鍵入哪個是python在終端它示出了位置USR/local/bin中/蟒)

腳本要在運行:OS =紅帽6.7

腳本寫入:OS = Windows10(蟒版本2.7.11)

代碼:

import urllib 
import json 
url = 'https://username:[email protected]'# sample URL(tested on 'api.openweathermap.org/data/2.5/weather?q=London' too gives the same error) 
data = json.load(urllib.urlopen(url)) #should return a json data 
print data 

在這裏,打印數據引發「json解碼器錯誤」,當我回顧我發現的步驟時,urllib.urlopen(url)根本沒有返回所需的json數據,而是有時返回一些ml響應/空。

如果我在不同的操作系統中運行python腳本,我需要做的任何特定更改不是python獨立於平臺的語言嗎?

+0

有時,Windows的'\ r \ n'結尾可能會在UNIX/Linux上混淆,因此請嘗試使用'dos2unix'進行轉換 - 您可能還必須對數據文件執行此操作。 – cdarke

+4

這是_exactly_你的代碼(複製和粘貼)?你有一個明顯的語法錯誤會產生不同的信息。 – Chris

+0

我認爲這個片段在第三行重複'url ='https://'。 –

回答

1

總體來說,python是合理的平臺獨立。但這並不意味着平臺之間沒有差異。如果您仔細閱讀標準庫的文檔,您會發現注意到某些功能或類只能在某些平臺上使用。並且例如multiprocessing的工作方式在類UNIX操作系統和ms-windows之間也不同。

在這種情況下,您提到故障始於urllib.urlopen未返回您所期望的事實。這可能不是Python代碼的問題。我嫌疑人這是一個網絡/路由/防火牆問題。您必須顯示返回的非JSON數據才能確定。另外,如果你想在Python中使用HTML,請自己來幫忙,並使用requests模組。這是更方便用戶,然後urllib

編輯1

它說:

您的請求無法被處理。請求無法處理

這可能是由錯誤配置或可能是格式錯誤的請求造成的。

因此,有兩個可能的原因:

  • 錯誤配置
  • 惡意請求

通過urllib.urlopen()返回的網絡對象有一些額外的方法相比,文件,如info()getcode()。使用這些可能會產生一些關於爲什麼請求失敗的額外信息。

如果您執行POST請求,則必須以某種方式對信息進行格式化和編碼。如果您使用requests.post,它會爲您處理這些細節。

+0

關於使用Requests模塊,它沒有解決問題。 – Rebbeca

+0

如果問題屬於網絡/路由/防火牆,是否需要在腳本中設置任何代理? – Rebbeca

+0

@Rebbeca我沒有想到它。 –