{"id":1170,"date":"2020-03-31T10:52:56","date_gmt":"2020-03-31T10:52:56","guid":{"rendered":"https:\/\/www.budus.it\/Blog\/?p=1170"},"modified":"2020-03-31T10:52:58","modified_gmt":"2020-03-31T10:52:58","slug":"python-percorso-assoluto-dello-script-in-esecuzione","status":"publish","type":"post","link":"https:\/\/www.budus.it\/Blog\/python-percorso-assoluto-dello-script-in-esecuzione\/","title":{"rendered":"Python: percorso assoluto dello script in esecuzione"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Pu\u00f2 sembrare una cosa banale ma, cercando, mi sono accorto che non lo \u00e8: <strong>ottenere in Python il percorso assoluto dello script attualmente in esecuzione<\/strong>.<\/p>\n\n\n\n<!--more-->\n\n\n\n<p class=\"wp-block-paragraph\">Iniziamo subito con la soluzione proposta:<\/p>\n\n\n\n<pre class=\"wp-block-cedaro-code line-numbers\"><code class=\"\">import os, sys\nscript_path = os.path.abspath(os.path.dirname(sys.argv[0]))\nprint(f\"Script caricato da: {script_path}\")<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Dove:<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>Importa la libreria &#8220;os&#8221; (per gestire il sistema operativo) e &#8220;sys&#8221; (per gestire i parametri di sistema).<\/li><li>Associa alla variabile &#8220;script_path&#8221; il risultato di &#8220;os.path.abspath()&#8221; &#8211; che serve per ottenere il <em>percorso assoluto a partire da un percorso qualsiasi<\/em> &#8211; che, a sua volta, prende il risultato da &#8220;os.path.dirname()&#8221; &#8211; la quale tronca un percorso assoluto e comprensivo del nome file e toglie quest&#8217;ultimo &#8211; che, ancora, prende il primo valore (&#8220;[0]&#8221;) impostato nella lista &#8220;sys.argv&#8221; (che contiene i parametri passati a riga di comando per eseguire lo script; il primo \u00e8 sempre il percorso completo dell&#8217;eseguibile).<\/li><li>Stampa il risultato utilizzando la formattazione avanzata (la &#8220;f&#8221; prima delle virgolette) introdotta in Python 3.x<\/li><\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">In giro ho trovato molte altre soluzioni, soprattutto quelle pi\u00f9 <em>semplici<\/em> che prevedono l&#8217;uso della variabile &#8220;__file__&#8221; che, tuttavia, non risultano <em>stabili<\/em> perch\u00e9 <em>in alcuni contesti non funzionano<\/em>, ad esempio:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Se lo script \u00e8 invocato da IDLE<\/li><li>Se lo script \u00e8 invocato da un altro script (<em>ma non sono certo, sono pigro e non ho provato)<\/em><\/li><li>Se lo script \u00e8 stato compilato come eseguibile (esistono dei tools che convertono i .py in .exe o comunque eseguibili per i vari sistemi operativi)<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Pu\u00f2 sembrare una cosa banale ma, cercando, mi sono accorto che non lo \u00e8: ottenere in Python il percorso assoluto dello script attualmente in esecuzione.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[57],"tags":[261],"class_list":["post-1170","post","type-post","status-publish","format-standard","hentry","category-development","tag-python"],"_links":{"self":[{"href":"https:\/\/www.budus.it\/Blog\/wp-json\/wp\/v2\/posts\/1170","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.budus.it\/Blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.budus.it\/Blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.budus.it\/Blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.budus.it\/Blog\/wp-json\/wp\/v2\/comments?post=1170"}],"version-history":[{"count":1,"href":"https:\/\/www.budus.it\/Blog\/wp-json\/wp\/v2\/posts\/1170\/revisions"}],"predecessor-version":[{"id":1171,"href":"https:\/\/www.budus.it\/Blog\/wp-json\/wp\/v2\/posts\/1170\/revisions\/1171"}],"wp:attachment":[{"href":"https:\/\/www.budus.it\/Blog\/wp-json\/wp\/v2\/media?parent=1170"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.budus.it\/Blog\/wp-json\/wp\/v2\/categories?post=1170"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.budus.it\/Blog\/wp-json\/wp\/v2\/tags?post=1170"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}