Suite

Dois-je définir arcpy.env.workspace au début de mon code python ?

Dois-je définir arcpy.env.workspace au début de mon code python ?


Je suis nouveau sur Arcpy et j'ai effectué des tâches simples telles que AddField_management et updateCursor. Cependant, j'ai reçu des messages d'erreur, tels que des erreurs 99999, etc. Les erreurs que je reçois sont liées au verrouillage du schéma ou à la couche non actualisée. Je dois donc exécuter une partie du code, fermer mon mxd et l'ouvrir à nouveau, le faire encore et encore.

Je fais probablement quelque chose de mal ou j'oublie quelque chose. Par exemple, je suis ne pas en définissant env.workspace ou in_memory ou en créant des fichiers temporaires _lyr. Ceci est un exemple de code simple que j'utilise, du début à la fin.

inFeatures = "MyLayer" fields = ['x','y'] # Ajoutez des champs à votre inFeatures pour le champ dans les champs : arcpy.AddField_management(inFeatures,str(field),"DOUBLE") avec arcpy.da.UpdateCursor(inFeatures , ('x','y',"[email protected]")) comme curseur : pour la ligne dans le curseur : ligne[0] = ligne[2].firstPoint.X ligne[1] = ligne[2].lastPoint.X curseur.updateRow(ligne)

J'obtiens les erreurs suivantes, 'x' a été créé par 'y' n'était pas. Je ferme mon mxd et l'ouvre à nouveau, et je peux voir le champ 'y'. Maintenant, j'exécute UpdateCursor, rien ne change (voir toujours les valeurs Null>). Ou j'obtiens l'erreur

Une colonne a été spécifiée qui n'existe pas

Je ferme le mxd, l'ouvre à nouveau et je peux voir les colonnes mises à jour. Cela se produit pour tous mes codes, pas seulement celui-ci (c'est-à-dire non rafraîchissant). Ma question est la suivante : dois-je toujours définir mon env.workspace ? J'exécute ArcGIS 10.1, les fichiers sont des jeux de données d'entités, j'utilise la fenêtre Python dans ArcGIS, le chemin du fichier n'est pas long, les couches n'ont pas d'espaces.


Votre code de base est très bon. D'après mes commentaires :

arcpy.da.UpdateCursor(inFeatures, ('x','y',"[email protected]"))

devrait être

arcpy.da.UpdateCursor(inFeatures,['x','y','[email protected]'])

Les crochets en font une liste qui correspond à ce que l'outil attend.

Les verrous de schéma se produisent lorsque vous avez les mêmes données ouvertes dans plusieurs sources ou avez laissé un curseur non fermé - en utilisantavecgarantit que le curseur se ferme correctement. Vous pouvez envisager d'inclure la vérification des erreurs pour les verrous en utilisantessayez : sauf :blocs.

Lors de l'ajout d'un champ à un objet de calque, il n'est pas rare que le nouveau champ soit inaccessible dans le calque, il est donc préférable d'ajouter le champ à la source de données et de recréer le calque. Vous pouvez obtenir la source de données à partir de la couche car il s'agit de l'une des propriétés des objets de couche.

import arcpy, sys inFeatures = "MyLayer" fields = ["x1","x2"] # déjà des chaînes, pas besoin de str() plus tard ds = inFeatures.dataSource dq = inFeatures.definitionQuery # la requête utilisée pour faire le layer # Ajoutez des champs à votre inFeatures pour le champ dans les champs : essayez : arcpy.AddField_management(ds,field,"DOUBLE") sauf : arcpy.AddError("Impossible d'ajouter le champ " + champ) sys.exit(-1) # abandonner le script # Refaire le calque arcpy.Delete_management("MyLayer") # vous n'avez pas besoin de le faire si vous définissez arcpy.env.overwriteOutput = True arcpy.MakeFeatureLayer_management(ds,"MyLayer",dq) # avec arcpy.da .UpdateCursor(inFeatures, ['x','y',"[email protected]"]) en tant que curseur : # autre façon de procéder : fields.append("[email protected]") avec arcpy.da.UpdateCursor(inFeatures, fields) comme curseur : pour la ligne dans le curseur : ligne[0] = ligne[2].firstPoint.X # Coordonnée X du premier point row[1] = row[2].lastPoint.X # Coordonnée X du dernier point cursor.updateRow( ligne)

Vous n'avez pas besoin de définirarcpy.env.espace de travail, ce sera par défaut ce qui est déjà défini dans les environnements de géotraitement, qui est défini lors de l'installation dans votre dossier de départ (C:Usersyour_nameDocumentsArcGISDefault.gdb).

La spécification de l'espace de travail est importante pour les fonctions telles que ListFeatureClasses qui renvoient uniquement les noms des classes d'entités (pas les chemins) ; toute entrée/sortie sans chemin complet sera considérée comme étant référencée à l'espace de travail courant, doncarcpy.MakeFeatureLayer("data","data_layer")recherchera dans votre espace de travail actuel une classe d'entités appelée "données" à partir de laquelle créer la couche - cela peut économiser de la saisie dans ces cas.


En plus de la réponse d'Emir Sürmen, vous pouvez compiler tous les canaux de texte du serveur, créer une nouvelle liste avec uniquement leurs identifiants, puis vérifier :

Ou quelque chose du genre.

Vous pouvez utiliser la fonction wait_for() dans votre commande. Voici un petit exemple à ce sujet :

Cependant, vous devrez trouver vous-même l'ID du canal. Cet exemple vérifie "hello".


La plupart des techniques pour stdin enverront la chaîne d'exploit au programme qui se terminera peu de temps après la fin de l'entrée. La meilleure façon de le garder ouvert par la suite et d'obtenir un shell actif est d'ajouter un chat en attente d'entrée sur son stdin . Cela devrait ressembler à ceci si vous parcourez un fichier :

Ou, comme ceci si vous voulez une commande shell :

Ou, enfin, si vous passez par le réseau :

Notez que je n'ai pas trouvé comment faire avec gdb pour garder l'entrée ouverte une fois la charge utile livrée.


Travailler avec des environnements

Créer un environnement virtuel

Pour créer un environnement virtuel, utilisez la commande suivante, où ".venv" est le nom du dossier de l'environnement :

Noter: Pour en savoir plus sur le module venv, voir Création d'environnements virtuels sur Python.org.

Lorsque vous créez un nouvel environnement virtuel, une invite s'affiche pour vous permettre de le sélectionner pour l'espace de travail.

Cela ajoutera le chemin d'accès à l'interpréteur Python du nouvel environnement virtuel aux paramètres de votre espace de travail. Cet environnement sera ensuite utilisé lors de l'installation des packages et de l'exécution du code via l'extension Python. Pour des exemples d'utilisation d'environnement virtuel dans des projets, consultez les didacticiels Python, Django et Flask.

Conseil: lorsque vous êtes prêt à déployer l'application sur d'autres ordinateurs, vous pouvez créer un fichier requirements.txt avec la commande pip freeze > requirements.txt ( pip3 sur macOS/Linux). Le fichier d'exigences décrit les packages que vous avez installés dans votre environnement virtuel. Avec uniquement ce fichier, vous ou d'autres développeurs pouvez restaurer ces packages à l'aide de pip install -r requirements.txt (ou, encore une fois, pip3 sur macOS/Linux). En utilisant un fichier d'exigences, vous n'avez pas besoin de valider l'environnement virtuel lui-même pour le contrôle de source.

Créer un environnement conda

L'extension Python détecte automatiquement les environnements conda existants à condition que l'environnement contienne un interpréteur Python. Par exemple, la commande suivante crée un environnement conda avec l'interpréteur Python 3.4 et plusieurs bibliothèques, que VS Code affiche ensuite dans la liste des interpréteurs disponibles :

En revanche, si vous ne spécifiez pas d'interpréteur, comme avec conda create --name env-00 , l'environnement n'apparaîtra pas dans la liste.

Pour plus d'informations sur la ligne de commande conda, consultez Environnements Conda (conda.io).

Si vous créez un nouvel environnement conda pendant que VS Code est en cours d'exécution, utilisez le Fenêtre de rechargement commande pour actualiser la liste d'environnements affichée avec Python : sélectionnez l'interprète sinon vous risquez de ne pas voir l'environnement là-bas. Cela peut prendre un peu de temps pour apparaître si vous ne le voyez pas au début, attendez 15 secondes, puis réessayez d'utiliser la commande.

Pour s'assurer que l'environnement est bien configuré du point de vue du shell, une option consiste à utiliser une invite Anaconda avec l'environnement activé pour lancer VS Code à l'aide du code . commander. À ce stade, il vous suffit de sélectionner l'interpréteur à l'aide de la palette de commandes ou en cliquant sur la barre d'état.

Bien que l'extension Python pour VS Code n'ait pas actuellement d'intégration directe avec les fichiers conda environment.yml, VS Code lui-même est un excellent éditeur YAML.

Les environnements Conda ne peuvent pas être activés automatiquement dans le terminal intégré VS Code si le shell par défaut est défini sur PowerShell. Pour changer de shell, voir Terminal intégré - Configuration.

Vous pouvez spécifier manuellement le chemin d'accès à l'exécutable conda à utiliser pour l'activation (version 4.4+). Pour ce faire, ouvrez la palette de commandes ( ⇧⌘P (Windows, Linux Ctrl+Shift+P ) ) et entrez Préférences : Ouvrir les paramètres utilisateur. Ensuite, définissez python.condaPath , qui se trouve dans la section d'extension Python des paramètres utilisateur, avec le chemin approprié.

Sélectionner et activer un environnement

Par défaut, l'extension Python recherche et utilise le premier interpréteur Python qu'elle trouve dans le chemin système. Pour sélectionner un environnement spécifique, utilisez le Python : sélectionnez l'interprète commande de la Palette de commandes ( P (Windows, Linux Ctrl+Maj+P ) ).

Noter: Si l'extension Python ne trouve pas d'interpréteur, elle émet un avertissement. Sur macOS, l'extension émet également un avertissement si vous utilisez l'interpréteur Python installé sur le système d'exploitation, car vous souhaitez généralement utiliser un interpréteur que vous installez directement. Dans les deux cas, vous pouvez désactiver ces avertissements en définissant python.disableInstallationCheck sur true dans vos paramètres utilisateur.

Vous pouvez changer d'environnement à tout moment. Changer d'environnement vous aide à tester différentes parties de votre projet avec différents interprètes ou versions de bibliothèque selon vos besoins.

le Python : sélectionnez l'interprète La commande affiche une liste des environnements globaux, des environnements conda et des environnements virtuels disponibles. (Voir la section Où l'extension recherche les environnements pour plus de détails, y compris les distinctions entre ces types d'environnements.) L'image suivante, par exemple, montre plusieurs installations Anaconda et CPython ainsi qu'un environnement conda et un environnement virtuel ( env ) qui se trouvent dans le dossier de l'espace de travail :

Noter: Sous Windows, cela peut prendre un peu de temps à VS Code pour détecter les environnements conda disponibles. Au cours de ce processus, vous pouvez voir "(caché)" avant le chemin d'accès à un environnement. L'étiquette indique que VS Code travaille actuellement avec des informations mises en cache pour cet environnement.

La sélection d'un interpréteur dans la liste ajoute une entrée pour python.pythonPath avec le chemin d'accès à l'interpréteur dans vos paramètres d'espace de travail. Étant donné que le chemin fait partie des paramètres de l'espace de travail, le même environnement doit déjà être sélectionné chaque fois que vous ouvrez cet espace de travail. Si vous souhaitez configurer un interpréteur par défaut pour vos applications, vous pouvez à la place ajouter manuellement une entrée pour python.pythonPath dans vos paramètres utilisateur. Pour ce faire, ouvrez la palette de commandes ( ⇧⌘P (Windows, Linux Ctrl+Shift+P ) ) et entrez Préférences : Ouvrir les paramètres utilisateur. Ensuite, définissez python.pythonPath , qui se trouve dans la section d'extension Python des paramètres utilisateur, avec l'interpréteur approprié.

L'extension Python utilise l'environnement sélectionné pour exécuter le code Python (en utilisant le Python : exécutez le fichier Python dans le terminal commande), en fournissant des services linguistiques (auto-complétion, vérification de la syntaxe, linting, formatage, etc.) lorsque vous avez un fichier .py ouvert dans l'éditeur, et en ouvrant un terminal avec la Terminal : Créer un nouveau terminal intégré commander. Dans ce dernier cas, VS Code a automatiquement activé l'environnement sélectionné.

Conseil: Pour empêcher l'activation automatique d'un environnement sélectionné, ajoutez "python.terminal.activateEnvironment": false à votre fichier settings.json (il peut être placé n'importe où en tant que frère des paramètres existants).

Conseil: Si la commande activate génère le message "Activate.ps1 n'est pas signé numériquement. Vous ne pouvez pas exécuter ce script sur le système actuel. », vous devez alors modifier temporairement la stratégie d'exécution de PowerShell pour autoriser l'exécution des scripts (voir À propos des stratégies d'exécution dans la documentation PowerShell) : Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process

Noter: Par défaut, VS Code utilise l'interpréteur identifié par le paramètre python.pythonPath lors du débogage du code. Vous pouvez remplacer ce comportement en spécifiant un chemin différent dans la propriété pythonPath d'une configuration de débogage. Voir Choisir un environnement de débogage.

La barre d'état affiche toujours l'interpréteur actuel.

La barre d'état reflète également lorsqu'aucun interprète n'est sélectionné.

Dans les deux cas, cliquer sur cette zone de la barre d'état est un raccourci pratique pour le Python : sélectionnez l'interprète commander.

Conseil: Si vous rencontrez des problèmes avec VS Code pour reconnaître un environnement virtuel, veuillez signaler un problème dans le référentiel d'extensions afin que nous puissions vous aider à en déterminer la cause.

Spécifier manuellement un interprète

Si VS Code ne localise pas automatiquement un interprète que vous souhaitez utiliser, vous pouvez définir le chemin d'accès manuellement dans votre fichier settings.json des paramètres de l'espace de travail. Avec l'une des entrées qui suivent, vous pouvez simplement ajouter la ligne en tant que frère à d'autres paramètres existants.)

Tout d'abord, sélectionnez le Déposer (Code sur macOS) > Préférences > Paramètres commande de menu ( ⌘, (Windows, Linux Ctrl+, ) ) pour ouvrir vos paramètres, sélectionnez Espace de travail.

Effectuez ensuite l'une des étapes suivantes :

Créez ou modifiez une entrée pour python.pythonPath avec le chemin complet de l'exécutable Python (si vous modifiez directement settings.json, ajoutez la ligne ci-dessous comme paramètre) :

Vous pouvez également utiliser python.pythonPath pour pointer vers un environnement virtuel, par exemple :

Vous pouvez utiliser une variable d'environnement dans le paramètre de chemin en utilisant la syntaxe $ . Par exemple, si vous avez créé une variable nommée PYTHON_INSTALL_LOC avec un chemin vers un interpréteur, vous pouvez alors utiliser la valeur de paramètre suivante :

Noter: La substitution de variable n'est prise en charge que dans les fichiers de paramètres VS Code, elle ne fonctionnera pas dans les fichiers d'environnement .env.

En utilisant une variable d'environnement, vous pouvez facilement transférer un projet entre des systèmes d'exploitation où les chemins sont différents, assurez-vous simplement de définir d'abord la variable d'environnement sur le système d'exploitation.

Environnements et fenêtres de terminal

Après avoir utilisé Python : sélectionnez l'interprète, cet interpréteur est appliqué lorsque vous cliquez avec le bouton droit sur un fichier et sélectionnez Python : exécutez le fichier Python dans le terminal. L'environnement est également activé automatiquement lorsque vous utilisez le Terminal : Créer un nouveau terminal intégré commande sauf si vous modifiez le paramètre python.terminal.activateEnvironment sur false .

Cependant, le lancement de VS Code à partir d'un shell dans lequel un certain environnement Python est activé n'active pas automatiquement cet environnement dans le terminal intégré par défaut. Utilisez le Terminal : Créer un nouveau terminal intégré commande après l'exécution de VS Code.

Noter: Les environnements conda ne peuvent pas être activés automatiquement dans le terminal intégré si PowerShell est défini comme shell intégré. Voir Terminal intégré - Configuration pour savoir comment changer le shell.

Toutes les modifications que vous apportez à un environnement activé dans le terminal sont persistantes. Par exemple, l'utilisation de conda install <package> depuis le terminal avec un environnement conda activé installe le package dans cet environnement de manière permanente. De même, l'utilisation de pip install dans un terminal avec un environnement virtuel activé ajoute le package à cet environnement.

Changer d'interprète avec le Python : sélectionnez l'interprète La commande n'affecte pas les panneaux de bornes déjà ouverts. Vous pouvez ainsi activer des environnements séparés dans un terminal fractionné : sélectionnez le premier interpréteur, créez un terminal pour celui-ci, sélectionnez un autre interpréteur, puis utilisez le bouton fractionné ( ⌘ (Windows, Linux Ctrl+Shift+5 ) ) dans le titre du terminal bar.

Choisissez un environnement de débogage

Par défaut, le paramètre python.pythonPath spécifie l'interpréteur Python à utiliser pour le débogage. Cependant, si vous avez une propriété pythonPath dans la configuration de débogage de launch.json , cet interpréteur est utilisé à la place. Pour être plus précis, VS Code applique l'ordre de priorité suivant lors de la détermination de l'interpréteur à utiliser pour le débogage :

  1. propriété pythonPath de la configuration de débogage sélectionnée dans launch.json
  2. Paramètre python.pythonPath dans l'espace de travail settings.json
  3. Paramètre python.pythonPath dans les paramètres utilisateur.json

Pour plus de détails sur la configuration de débogage, consultez Configurations de débogage.


Lecture de données à partir d'un périphérique externe

J'ai besoin d'aide pour la lecture des données. Dans ma situation, j'ai un Arduino Uno connecté via USB au RPi. L'Arduino envoie des données au RPi avec Serial.write(). L'Arduino sort 128 octets à chaque période de lecture.

Une partie du code Arduino qui produit la sortie ressemble à ceci :

Actuellement, j'ai mon code Python comme ceci :

j'ai essayé d'utiliser ser.read() mais la sortie que j'ai obtenue est un tas de symboles. Si je modifie le code dans Arduino pour Serial.println() Je peux lire les données avec ser.readline() côté RPi mais les données obtenues n'ont pas 128 échantillons dans une période (je n'ai eu qu'environ 40 échantillons dans une période). Je pense que cela pourrait être dû au Serial.println() commande qui a converti 3 octets en une valeur entière et ceux-ci ne sont pas utilisables pour moi.

Je comprends qu'il y a une différence avec Serial.println et Serial.write. Serial.write écrit des données binaires sur le port série et Impression.série imprime les données sur le port série sous forme de texte ASCII lisible par l'homme.

Je veux convertir les données reçues en uint8 format en ajoutant une autre ligne de code python comme ceci :

Pour que je puisse voir les valeurs (0-255). J'ai toujours du mal avec ça. Un conseil ? Toute aide est très appréciée. :)


Dans sh qui est en fait un tiret sur Ubuntu, le retour de commande intégré ne peut renvoyer que des valeurs numériques - des statuts de sortie, qui ont une signification dans le contexte d'une fonction ou d'un script source. Source man sh :

La syntaxe de la commande return est

Tout le reste avec votre script shell semble correct. Je pense que vous devez utiliser echo $ COLOR à la place revenir et supprimer d'autres échos.

Au cas où vous auriez besoin de renvoyer plus de données au script principal, vous pouvez tout afficher sur une seule ligne et diviser le des champs par un caractère qui jouera le rôle de délimiteur dans le script principal sur lequel vous pourrez convertir la chaîne en un tableau. Par exemple (où , est notre délimiteur et -n remplacera le caractère de nouvelle ligne dans echo ):

Les autres informations fournies par le script et non requises par le script principal peuvent être redirigées vers un fichier journal :

Malheureusement, je n'ai pas beaucoup d'expérience avec Python, mais voici un exemple de script .py qui peut gérer la sortie du script .sh ci-dessus (référence) :


4 réponses 4

Vous pouvez exécuter ce script pour remplacer tous les matériaux dupliqués dans votre fichier. Collez-le simplement dans l'éditeur de texte et cliquez sur le bouton Exécuter le script.

Il recherche tous les objets, puis compare la première partie du nom du matériau (la partie avant le suffixe .001) avec tous les matériaux portant le même nom et, si une correspondance est trouvée, remplace le matériau de l'objet par le matériau correspondant.

L'idée serait de faire une copie de la scène complète, puis d'exécuter ce script pour supprimer tous les doublons matériels.

Avant d'exécuter le script, assurez-vous que vos matériaux sont nommés correctement. Tout matériau qui se termine par .001, .002 ou 003, sera remplacé par sa "version originale".

Le crédit pour le script va à l'utilisateur liero sur cette page BlenderArtist.org

Ctrl + Shift + O termine le travail en rechargeant le fichier.

Le module complémentaire suivant crée une scène vide, duplique tous les objets et les lie au nouveau sans dupliquer les matériaux des objets :

Une fois activé, appuyez sur la barre d'espace dans Vue 3D et exécutez 'Dupliquer la scène'. Notez qu'il s'agit uniquement d'une copie des objets de la scène, les paramètres de rendu et d'univers sont par défaut.

custom-scene-duplicator.py

Installez le module complémentaire via Fichier > Préférences utilisateur > Modules complémentaires > Installer à partir d'un fichier.

Ne serait-ce pas aussi simple que d'utiliser le Nouvelle scène > Lier des objets Nouvelle scène > Lier les données d'objet?

Vous pouvez alors sélectionner tous les objets et appuyer sur U Créer un seul utilisateur > Objet ou alors Créer un seul utilisateur > Objet et données et vous aurez virtuellement dupliqué votre scène avec tous les nouveaux objets avec des données d'objet indépendantes, mais en conservant les mêmes matériaux.

Le seul inconvénient est que si vous avez des instances d'objet dans la même scène, leurs relations seront également perdues lors de la création d'un seul utilisateur.

Vous pouvez contourner ce problème en sélectionnant tous les objets avec les mêmes données d'objet en utilisant Maj + L Sélectionnez Lié > Données d'objet, en s'assurant que l'un d'eux est l'objet actif, puis en faisant un seul utilisateur de l'objet actif, puis en les liant tous au nouveau avec Ctrl + L Lien > Données d'objet

Une astuce très simple pour nettoyer une scène de tous ses matériaux et morceaux orphelins est de l'exporter au format wavefront (.obj). En conséquence, vous obtiendrez deux fichiers. Le fichier obj contient vos objets avec très peu de différences par rapport à Blender, sauf que vous perdez des modificateurs. Par exemple, si un modificateur subsurf est actif lors de l'exportation, l'objet sera enregistré avec subsurf appliqué. Les tableaux, filaires ou treillis sont définitivement appliqués aux objets .obj.

L'autre fichier (.mtl) contient tous les matériaux (avec leurs textures dépendantes). Effacez-le ou renommez-le et réimportez .obj dans un environnement de mélangeur vierge. Tous les morceaux indésirables sont nettoyés du nouveau fichier blend.

Cela peut être utile lors de la migration d'une scène vers Cycles Render ou si votre mélange est plein de morceaux orphelins (fuites de mémoire) qui n'ont pas été effacés lorsque leur référence parent a été supprimée.


Résumé des problèmes SSL d'ArcGIS Server

par ThomasColson

C'est vraiment juste pour m'aider à "marquer" tous les problèmes SSL, car nous en avons beaucoup, j'espère que cela aidera d'autres personnes !

  1. Échec des services SSL sécurisés dans le générateur d'applications Web.
  2. ArcGIS Portal 10.3 - Certificat SSL pour le réseau interne QUESTIONS
    1. Comprend un vérificateur REST peu connu qui teste le statut du certificat : cool ! https://%3Cserver.domain.com%3E:7443/arcgis/sharing/checkUrl.jsp?url=%3CinsertURLthatisboundtothecer.
    1. L'affiche n'arrive pas à faire fonctionner un certificat, explorée à l'aide de son propre serveur CA
    1. Message à retenir : utilisez un alias DNS approprié !
    1. Il semble que l'activation de "HTTPS" ne provoque que des erreurs d'application en aval
    1. N'utilisez pas Amazon ECW si vous avez besoin de PKI !
    1. Un autre test de la fonctionnalité SSL SSL Server Test (Powered by Qualys SSL Labs)
    1. PKI- Portal ne fonctionne pas avec python
    1. L'activation de SSL interrompt les outils GP
    1. Les horreurs du proxy inverse
      1. 40694 - Configurer un proxy inverse avec ArcGIS 10.1 for Server sur IIS ARR avec SSL
      1. Les certificats doivent utiliser le nom de domaine complet
      1. Une autre confirmation que les certificats génériques ne fonctionnent pas
      1. SSL est requis pour crypter les mots de passe
      1. rappelez-vous, ArcGIS Server est un serveur Web Apache distinct : nécessite également un certificat de confiance ! Le certificat AGIS doit être signé par une autorité de certification de confiance
      1. SSL tue les performances. Quelle surprise.
      1. C'est un gros problème : si l'organisation requiert uniquement HTTPS, elle ne peut pas consommer de contenu HTTP dans le portail

      4 réponses 4

      Vous souhaitez effectuer une action 10 fois. Le compteur de boucles n'a pas d'importance pour votre code, il vous suffit de poser 10 questions. La façon dont vous avez écrit le code, vous avez:

      en 6 endroits, qui sont tous nécessaires, sinon vous boucleriez trop de fois. C'est très sujet aux erreurs. Si vous avez ajouté la prise en charge de la division, vous devrez l'écrire deux fois de plus. La bonne règle de base est de ne jamais se répéter !

      La meilleure façon de boucler 10 fois en Python, quand vous ne vous souciez pas du nombre de boucles, est :

      Pas besoin de s'inquiéter de l'incrémentation du nombre. Laissez range() le faire pour vous.

      Ne vous répétez pas

      Le code pour additionner, soustraire et multiplier est le même. La seule différence est l'opération que vous effectuez et l'opération que vous imprimez. La plupart du temps, vous l'avez déjà remanié. Vous utilisez op() pour effectuer l'opération. Allons donc un peu plus loin :

      Et puis, je copie à peu près votre logique d'ajout avec un seul changement réel (et en renommant certaines variables):

      J'ai également renommé vos variables en réel et attendu , au lieu de question et réponse - car la question ne faisait pas vraiment référence à une question. De plus, += 1 est une manière plus concise d'exprimer l'incrémentation de un.

      Dites à l'utilisateur la réponse ?

      Si l'utilisateur se trompe, voulez-vous lui donner la bonne réponse ?

      Finir

      Vous n'avez pas besoin de vérifier le décompte (ou, maintenant, _ ) pour savoir quand vous avez terminé. Attendez simplement que la boucle se termine, vous pouvez alors imprimer la partition. Le flux ressemble donc à :

      Bien que généralement vous exprimez le score comme X/10, pas sur 10 n'est X. C'est juste drôle.


      3 réponses 3

      Alternativement, vous pouvez utiliser la commande :g. Je ferais:

      commenter. C'est bien car c'est plus lisible (et plus court) qu'une commande de recherche et de remplacement. Explication:

      Le commentaire fonctionne de la même manière, sauf qu'il recherche une chaîne différente et qu'il utilise I# au lieu de ^x . I# signifie insérer # dans la première colonne sans espace.

      Il existe une solution qui peut être assez simple si vous êtes prêt à utiliser un plugin : NERDCommenter.

      Ce plugin est fait pour "commenter intensément orgasmique" selon leur page github. Plus précisément, il crée plusieurs mappages pour gérer les commentaires et l'un des mappages est <Leader>ci qui permet de basculer les commentaires d'une ligne.

      Combiné à une commande globale, il vous permet de faire ce que vous pouvez. Disons que votre leader est , il peut utiliser la commande suivante :

      Et cela fera basculer les commentaires sur les lignes correspondant à pdb.set_trace()

      Notez que vous ne pouvez pas facilement utiliser <leader> directement dans la commande normale (voir ma question à ce sujet)

      Si votre leader est <space>, vous devrez faire :

      Notez qu'il est facile de le mapper à une clé :

      Et enfin, le gros avantage de cette méthode est que NERDcommenter gère automatiquement la langue que vous éditez afin que vous puissiez créer une commande qui basculera les commentaires sur les lignes correspondant à un modèle défini, quelle que soit la langue que vous éditez :

      Maintenant, quelle que soit la langue que vous modifiez, vous pouvez utiliser :ToogleCom foo pour basculer le commentaire de toutes les lignes correspondant à foo . (Si votre leader ne l'est pas, voir le paragraphe précédent de ma réponse)

      Si vous avez besoin de styles de commentaires différents, vous pouvez modifier le mappage utilisé, voir :h NERDComFunctionalitySummary pour plus d'informations.


      Utiliser Python pour insérer JSON dans PostgreSQL [fermé]

      Vous voulez améliorer cette question ? Mettez à jour la question afin qu'elle soit d'actualité pour les administrateurs de base de données Stack Exchange.

      J'ai le tableau suivant :

      Maintenant, je veux essentiellement charger un objet json à l'aide d'un script python et laisser le script python insérer le json dans la table. J'ai réussi à insérer un JSON via psql, mais ce n'est pas vraiment insérer un fichier JSON, il s'agit plutôt d'insérer une chaîne équivalente à un fichier JSON et PostgreSQL le traite simplement comme json.

      Ce que j'ai fait avec psql pour insérer un fichier JSON :

      Lecture du fichier et chargement du contenu dans une variable

      Insertion du JSON à l'aide de json_populate_recordset() et de la variable prédéfinie 'content' :

      Cela fonctionne bien mais je veux que mon script python fasse de même. Dans le code suivant, la connexion est déjà établie :

      J'obtiens l'erreur suivante :

      Si je colle le contenu JSON dans pgAdmin4 et que j'utilise la chaîne dans json_populate_recordset(), cela fonctionne. Je suppose que je gère mal le fichier JSON.