das war nur ein kopier fehler. ist natürlich nicht extra eingerückt. danke aber für den tipp
zerspaner_gerd 383
zusätzlich zu den was Smithy geschrieben hat:
data = data.encode('ascii')
Das will python/Cura auch nicht weil data ja eine Liste ist, wie ich es in den anderen Thread erwähnt hatte.
2021-11-12 19:45:11,348 - ERROR - [MainThread] UM.Logger.logException [117]: File "C:\Program Files\Ultimaker Cura master\plugins\PostProcessingPlugin\scripts\CNCconvert.py", line 58, in execute
2021-11-12 19:45:11,349 - ERROR - [MainThread] UM.Logger.logException [117]: data = data.encode('ascii')
2021-11-12 19:45:11,350 - ERROR - [MainThread] UM.Logger.logException [117]: AttributeError: 'list' object has no attribute 'encode'
Und wie schon in anderen Thread erwähnt würde ich den Test log am Anfang deines Scriptes setzen, wenn in deinen Code ein Fehler drin ist (und da sind welche), wird dein Script abgebrochen also wird dein Test log nie gelesen
Weiteres sind hier noch Fehler drin, weiter läuft es garnicht:
req = Request(config_url, data=data, method='POST') resp = request.urlopen(req)
Diese werden schon in meinen Editor falsch angezeigt
Cura gibt folgendes aus:
2021-11-12 20:11:29,036 - ERROR - [MainThread] UM.Logger.logException [117]: File "C:\Program Files\Ultimaker Cura master\plugins\PostProcessingPlugin\scripts\CNCconvert.py", line 60, in execute
2021-11-12 20:11:29,038 - ERROR - [MainThread] UM.Logger.logException [117]: resp = req.urlopen(req)
2021-11-12 20:11:29,039 - ERROR - [MainThread] UM.Logger.logException [117]: AttributeError: 'Request' object has no attribute 'urlopen'
Aktuell habe ich dein Skript so umgeschrieben:
from ..Script import Script import urllib import json import sys from urllib.request import Request, urlopen from urllib.parse import urlencode from UM.Logger import Logger class CNCconvert(Script): def __init__(self): super().__init__() def getSettingDataString(self): return """{ "name":"CNC-Convert", "key": "CNCconvert", "metadata": {}, "version": 2, "settings": { "nerster_eintrag": { "label": "erster eintrag", "description": "info", "type": "str", "default_value": "" }, "zweiter_eintrag": { "label": "zweiter eintrage", "description": "info", "type": "str", "default_value": "" }, "dritter_eintrag": { "label": "dritter eintrag", "description": "info", "type": "str", "default_value": "" }, "vierter_eintrag": { "label": "vierter eintrag", "description": "infos", "type": "str", "default_value": "" } } }""" def execute(self, data): Logger.log("d", "CNCconvert Plugin") config_url = 'http://meinserver/test.php' headers = {} headers['Content-type'] = 'application/json' # data = data.encode('ascii') req = Request(config_url, data=data, method='POST') resp = req.urlopen(req) # Abfrgae ob der Request zum Server durgeführt werden kann # Der Statuscode 200 gibt Server gefunden an, sonst 404, 401, 403 etc. HTTP-Error-Code if resp.getcode() == 200: Logger.log("d", "if Status 200") new_gcode = resp.read().decode('ascii') else: # Wenn der request nicht 200 ist und kein zugriff gewährt wird Logger.log("d", "else") error_msg = "Could not fetch script config from internet" Logger.log("d", error_msg) raise Exception(error_msg) resp.close() return data
Verzeihung zerspanner_gerd. du warst schneller.
ich bin mal weg von den api, da dies zu umständlich ist.
hier mal mein request code:
def execute(self, data):
Logger.log("d", "test1")
config_url = 'http://myserver.com/test.php'
headers = {}
headers['Content-type'] = 'application/json'
values = {}
values['gcocde'] = "test"
data = urlencode(values).encode('ascii')
req = Request(config_url, data=data, method='POST')
resp = urlopen(req)
#Abfrgae ob der Request zum Server durgeführt werden kann
#Der Statuscode 200 gibt Server gefunden an, sonst 404, 401, 403 etc. HTTP-Error-Code
if resp.getcode() == 200:
settings = resp.read().decode('ascii')
else:
#Wenn der request nicht 200 ist und kein zugriff gewährt wird
error_msg = "Could not fetch script config from internet"
Logger.log("d", error_msg)
raise Exception(error_msg)
return data
ich probier deinen code gleich aus. weshalb zeigen meine log files keine fehler 😞
Edited by jumbo125zerspaner_gerd 383
13 minutes ago, jumbo125 said:ich probier deinen code gleich aus. weshalb zeigen meine log files keine fehler
Naja du wirst es halt nicht gefunden haben, weil keiner deiner log ausgaben gelesen wurde bzw. geschrieben wurde.
Hast du mal ein Link wo du deine Infos her hast.
Die Info wo ich finde wenn ich nach "urllib.request" google haben einen anderen aufbau.
die idee kam durch dieses script
https://github.com/csabag/BoostedGcodeCuraPlugin/blob/BoostedGcodeCuraPlugin/BoostedGcode.py
Mein code, welcher keinen Fehler ausgibt:
# Description: This plugin conver 3d-printing gcode to milling CNC-gcode
from ..Script import Script
import urllib
import json
import sys
from urllib.request import Request, urlopen
from urllib.parse import urlencode
from UM.Logger import Logger
class CNCconvert(Script):
def __init__(self):
super().__init__()
def getSettingDataString(self):
return """{
"name":"CNC-Convert",
"key": "CNCconvert",
"metadata": {},
"version": 2,
"settings":
{
"nerster_eintrag":
{
"label": "erster eintrag",
"description": "info",
"type": "str",
"default_value": ""
},
"zweiter_eintrag":
{
"label": "zweiter eintrage",
"description": "info",
"type": "str",
"default_value": ""
},
"dritter_eintrag":
{
"label": "dritter eintrag",
"description": "info",
"type": "str",
"default_value": ""
},
"vierter_eintrag":
{
"label": "vierter eintrag",
"description": "infos",
"type": "str",
"default_value": ""
}
}
}"""
def execute(self, data):
Logger.log("d", "CNCconvert Plugin")
config_url = 'http://meinserver.com/test.php'
headers = {}
headers['Content-type'] = 'application/json'
values['gcocde'] = "test"
data = urlencode(values).encode('ascii')
req = Request(config_url, data=data, method='POST')
resp = req.urlopen(req)
# Abfrgae ob der Request zum Server durgeführt werden kann
# Der Statuscode 200 gibt Server gefunden an, sonst 404, 401, 403 etc. HTTP-Error-Code
if resp.getcode() == 200:
Logger.log("d", "if Status 200")
new_gcode = resp.read().decode('ascii')
else:
# Wenn der request nicht 200 ist und kein zugriff gewährt wird
Logger.log("d", "else")
error_msg = "Could not fetch script config from internet"
Logger.log("d", error_msg)
raise Exception(error_msg)
return data
Edited by jumbo125
zerspaner_gerd 383
Bitte lösche deine cura.log wieder, das gescrolle ist nicht schön und macht alles unübersichtlich
Falls du die Cura.log Teilen willst lade die ganze Datei hoch, so kann ich es Downloaden und mit meinen Text Editor durchsuchen
Vielleicht ist es auch besser die scripte komplett hoch zuladen, ohne das rein Kopiere.
Bei mir ist alles rot weil das "def execute(self, data):" zu weit nach rechts eingezogen ist
glaub du solltest mal dein Python editor wechseln, wenn das bei dir auch so ist ist es kein wunder das du keine Fehler in der log findest weil dort höchstwahrscheinlich wieder nichts läuft.
Bei mir werden noch mehr Fehler angezeigt
Weiteres bin ich mal direkt auf Python gegangen ohne den Cura zeug, da werden gleich 45 Zeilen Fehler ausgegeben.
Also glaub da stimmt was mit der schreibweise ganz und garnicht.
Da du das aus einen Cura Plugin (API hattest du das glaub genannt), vielleicht ist da Cura mit Python gemischt, muss ich mir mal vergleichen
Edited by zerspaner_gerdOkay danke!
Halt dich nicht zu lange auf!
Ich wechsle morgen den Editor.
zerspaner_gerd 383
39 minutes ago, jumbo125 said:Mein code, welcher keinen Fehler ausgibt:
Da wird aber gar kein log ausgegeben daher findest du höchstwahrscheinlich die Position wieder nicht.
Also es läuft garnicht daher auch keine Fehler
Habe mir deine Cura.log runter kopiert
Edited by zerspaner_gerdzerspaner_gerd 383
Also bin jetzt außerhalb von Cura.
Habe nach den Fehler gegoogelt:
urllib.error.URLError: <urlopen error [Errno 11002] getaddrinfo failed>
Das stand das es die URL ist
Habe jetzt dann meine URL von meiner NAS eingegeben dann wurde ein ganzer Haufen Code ausgegeben ohne Fehler.
Bei meinen 3D Drucker kahm wieder viele Fehler, zum Schluss stand dieses:
urllib.error.HTTPError: HTTP Error 500: only rr_upload is supported for POST requests
Also irgendwie funktioniert da die Fehler abfrage nicht, den wenn so ein Fehler in Cura Script auch ist wird das ganze Skript abgebrochen.
Habe jetzt folgender maßen getestet und den Fehler mit try und except abgefangen:
Hier ist der Code (reiner Python Code) zum testen würde ich dir das auch empfehlen
import urllib import json import sys from urllib.request import Request, urlopen from urllib.error import HTTPError from urllib.parse import urlencode def execute(): print("CNCconvert Plugin") config_url = 'http://meinserver.com/test.php' headers = {} headers['Content-type'] = 'application/json' values = {} values['gcocde'] = "test" data = urlencode(values).encode('ascii') req = Request(config_url, data=data, method='POST') # resp = "" try: resp = urlopen(req) except HTTPError as e: print("gelaufen except", e) return # Abfrgae ob der Request zum Server durgeführt werden kann # Der Statuscode 200 gibt Server gefunden an, sonst 404, 401, 403 etc. HTTP-Error-Code if resp.getcode() == 200: print("d", "if Status 200", resp) settings = resp.read().decode('ascii') print("read", settings) else: # Wenn der request nicht 200 ist und kein zugriff gewährt wird print("else") error_msg = "Could not fetch script config from internet" print(error_msg) execute()
Da drückt man Play und in der Konsole wird das Ergebnis gleich ausgegeben:
Bin jetzt nur drüber geblieben da ein wenig Übung nie schadet, bin jetzt kein python Profi der täglich damit arbeitet.
Hatte auch kurz gedacht ich hätte da ein Anwendung Einsatz, aber bis man sich da wieder durchgelesen hat um das zu erreichen was man will wäre das wieder sehr viel aufwand
Halt mich auf den laufenden
Gruß
ALLES AUF ANFANG.
Das script funktionierte bereits gestern schon....
Ich vollidiot bin erst jetzt draufgekommen, wann der prozess startet.
nämlich nicht mit dem slicen, sondern mit dem speichern!
wenn ich auf speichern drücke, funktioniert alles....
Es tut mir sehr leid, dass ich eure Zeit in Anspruch genommen habe und teilweise Fehler gefunden habe, wo es keine Fehler gibt..... jetzt weiß ich auch, weshalb der logger.log nichts ausgegeben hat. habe ein script von gestern hergenommen und auch slicen UND SPEICHERN geklickt. Da läufts schon...
ich ärgere mich in Grund und Boden...
Edited by jumbo12519 hours ago, zerspaner_gerd said:
Naja du wirst es halt nicht gefunden haben, weil keiner deiner log ausgaben gelesen wurde bzw. geschrieben wurde.
Hast du mal ein Link wo du deine Infos her hast.
Die Info wo ich finde wenn ich nach "urllib.request" google haben einen anderen aufbau.
Falls jemand den Threa liest.
Das hier war meine Unwissenheit. Der Codebeispiele zum Schreiben der Log daten funktionieren alle, so wie es die Forenmitglieder empfohlen haben, nur wusste ich nicht, dass ich slicen und speichern musste.
Recommended Posts
Smithy 1,146
Ich weiß nicht ob es nur am Forum liegt und das in Wirklichkeit vielleicht eh nicht so aussieht, aber die Einrückung ist falsch und Python ist da sehr pingelig, da müssen die Einrückungen stimmen.
Link to post
Share on other sites