2017-03-17 1 views
-2

Ich habe ein Python-Skript, das ich in Redhat 6.7 OS ausführen möchte, aber es ist ständig fehlgeschlagen.Python 2.7 Windows Scripts arbeiten nicht in Unix

** Python-Version: 2.7.13 (zunächst hatte es Standardversion, die ich Symlink zu usr/local/bin/python2.7 habe, nicht sicher, ob es in 2.7 geändert hat, aber wenn ich was python in Terminal eingeben es zeigt die Lage usr/local/bin/python)

Script auf ausgeführt werden. OS = Redhat 6.7

Script geschrieben in: OS = Microsoft Windows 10 (python ver 2.7.11)

Code :

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 

Hier Druckdaten erhöhen "JSON-Decoder-Fehler", als ich zurück in die Schritte sah ich urlib.urlopen (url) ist überhaupt nicht die erforderlichen JSON-Daten statt einige ml Antwort/leer zu Zeiten.

Gibt es bestimmte Änderungen, die ich tun muss, wenn ich ein Python-Skript in verschiedenen Betriebssystemen ausführen nicht Python eine plattformunabhängige Sprache?

+0

Manchmal können die '\ r \ n' Zeilenenden von Windows unter UNIX/Linux verwirren, versuchen Sie also, mit' dos2unix' zu konvertieren - Sie müssen dies möglicherweise auch für die Datendateien tun. – cdarke

+4

Ist das _exactly_ Ihr Code (kopiert und eingefügt)? Sie haben einen offensichtlichen Syntaxfehler, der eine andere Nachricht generieren würde. – Chris

+0

Ich denke, dieses Fragment wird in der dritten Zeile "url = 'https: //" wiederholt. –

Antwort

1

Im Großen und Ganzen ist Python vernünftig Plattform unabhängig. Aber das bedeutet nicht, dass es keine Unterschiede zwischen den Plattformen gibt. Wenn Sie die Dokumentation der Standardbibliothek durchsehen, finden Sie Hinweise, dass einige Funktionen oder Klassen nur auf bestimmten Plattformen verfügbar sind. Und z.B. die Art, wie multiprocessing funktioniert, unterscheidet sich auch zwischen UNIX-ähnlichen Betriebssystemen und MS-Windows.

In diesem Fall erwähnen Sie, dass das Problem mit der Tatsache beginnt, dass urllib.urlopen nicht zurückgibt, was Sie erwarten. Dies ist wahrscheinlich kein Problem mit dem Python-Code. I verdächtigen es ist ein Netzwerk/Routing/Firewall-Problem. Sie müssten die zurückgegebenen Nicht-JSON-Daten zur Sicherheit anzeigen.

Als Nebenbemerkung, wenn Sie HTML in Python verwenden möchten, tun Sie sich selbst einen Gefallen und verwenden Sie das requests Modul. Es ist viel benutzerfreundlicher als urllib.

Edit 1:

Dort heißt es:

Ihre Anfrage nicht verarbeitet werden konnten. Anfrage konnte nicht bearbeitet werden

Dies kann durch eine Fehlkonfiguration oder möglicherweise eine fehlerhafte Anfrage verursacht werden.

So gibt es zwei mögliche Ursachen:

  • Misconfiguration
  • malformed Anfrage

Das Netzwerk Objekt durch urllib.urlopen() hat einige zusätzliche Methoden im Vergleich zu Dateien, wie info() und getcode() zurückgegeben. Wenn Sie diese verwenden, erhalten Sie möglicherweise zusätzliche Informationen darüber, warum die Anforderung fehlgeschlagen ist.

Wenn Sie eine POST-Anfrage machen, müssen die Informationen in einer bestimmten Weise formatiert und codiert werden.Wenn Sie requests.post verwenden, wird es diese Details für Sie behandeln.

+0

in Bezug auf die Verwendung von Anfragen Modul, löste es das Problem nicht. – Rebbeca

+0

Wenn das Problem zu Netzwerk/Routing/Firewall gehört, muss ich einen Proxy im Skript festlegen? – Rebbeca

+0

@Rebbeca Ich habe es nicht erwartet. –