Ich führe mein Hauptskript in Python 3.5 mit der Spyder IDE, und ich möchte Funktionen aus einem Skript importieren, das nur in Python 3.4 funktioniert. So war ich empfohlen, diese zweite Skript als ein subProzess wie so laufen:UnicodeEncodeError nur wenn Skript als Subprozess ausgeführt wird
import subprocess
cmd = [r'c:\python34\pythonw.exe', r'C:\users\John\Desktop\scraper.py']
p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
stdout, stderr = p.communicate()
print(stdout)
print(stderr)
Das Skript aufgerufen wird, ist ein Beispiel von NikolaiT Web Motor Scraper:
# -*- coding: utf-8 -*-
import sys
from GoogleScraper import scrape_with_config, GoogleSearchError
from GoogleScraper.database import ScraperSearch, SERP, Link
def basic_usage():
# See in the config.cfg file for possible values
config = {
'SCRAPING': {
'use_own_ip': 'True',
'search_engines': 'baidu',
'num_pages_for_keyword': 3
},
'keyword': '苹果',
'SELENIUM': {
'sel_browser': 'chrome',
},
'GLOBAL': {
'do_caching': 'False'
}
}
try:
sqlalchemy_session = scrape_with_config(config)
except GoogleSearchError as e:
print(e)
# let's inspect what we got
link_list = []
for serp in sqlalchemy_session.serps:
#print(serp)
for link in serp.links:
#print(link)
link_list.append(link.link)
return link_list
links = basic_usage()
print("test")
for link in links:
print(link)
Dieses Skript funktioniert gut, wenn es läuft in Python 3.4 IDLE IDE, aber wenn ich es als Subprozess wie oben ausgeführt, bekomme ich die folgenden UnicodeEncodeError von meinem Hauptskript gedruckt:
\ python34 \ scripts \ googlescraper \ GoogleScraper \ caching.py ", Zeile 413, in parse_all _cached_files store_serp_result (SERP, self.config)
Datei "C: \ python34 \ Scripts \ googlescraper \ GoogleScraper \ output_converter.py", Leitung 123, in store_serp_result pprint.pprint (Daten)
Datei „C: \ python34 \ lib \ pprint.py“, Zeile 52, in pprint printer.pprint (Objekt)
Datei "C: \ python34 \ lib \ pprint.py", Leitung 139, in pprint self._format (Objekt, self._stream, 0, 0, {}, 0)
Datei "C: \ python34 \ lib \ pprint.py", Linie 193, in _FORMAT Geld + 1, Rahmen, Level)
012.Datei "C: \ python34 \ lib \ pprint.py", Linie 268, in _FORMAT write (rep)
Datei "C: \ python34 \ lib \ Kodierungen \ cp1252.py", Zeile 19, in encode Rückkehr codecs.charmap_encode (Eingang, self.errors, encoding_table) [0] UnicodeEncodeError: \ 'charmap \' Codec kann \ 't Zeichen in Position kodieren 1-2: Zeichen zuordnet undefined'
Warum sollte dies nur passiert wenn es indirekt läuft? Danke für jede Hilfe, Klärungsfragen oder Verbesserungsvorschläge bei der Formulierung meiner Frage.
Aha! Diese schnelle Lösung funktioniert, wenn Sie das zweite Python-Skript über die Befehlszeile ausführen! Könnte ich Sie bitten, klarzustellen, was Sie mit der Spyder-IDE meinen? Gibt es einen programmatischen Zusatz zu meinem Hauptcode, der "chcp 65001" vor dem Aufruf des Unterprozesses aktivieren könnte? – Cjp
@Cjp Ich denke nicht, dass etwas Programmgesteuertes getan werden könnte - es ist eher ein Codierproblem mit Windows ... –