{"id":224,"date":"2018-04-26T09:19:28","date_gmt":"2018-04-26T09:19:28","guid":{"rendered":"http:\/\/python.wp.w3.pt\/?p=224"},"modified":"2018-04-26T10:25:14","modified_gmt":"2018-04-26T10:25:14","slug":"argumentos-para-o-script","status":"publish","type":"post","link":"http:\/\/python.w3.pt\/?p=224","title":{"rendered":"Argumentos para o script"},"content":{"rendered":"<p>O Python tem v\u00e1rias formas de gerir argumentos passados a um script. No <a href=\"https:\/\/stackoverflow.com\/questions\/1009860\/how-to-read-process-command-line-arguments\">stackoverflow<\/a> indicam v\u00e1rios, com exemplos de utiliza\u00e7\u00e3o.<\/p>\n<p>Os exemplos seguintes usam o <strong>argparse<\/strong>, uma biblioteca standard, e parte deles foram retirados do <a href=\"https:\/\/docs.python.org\/3\/howto\/argparse.html\">Argparse Tutorial<\/a>.<\/p>\n<pre>import argparse\r\nparser = argparse.ArgumentParser()\r\nparser.parse_args()<\/pre>\n<p>No exemplo anterior, utiliza-se a configura\u00e7\u00e3o m\u00ednima. A classe <strong>ArgumentParser<\/strong> cria um parser m\u00ednimo com as funcionalidades apresentadas nas utiliza\u00e7\u00f5es seguintes:<\/p>\n<pre>$ prog.py\r\n$ prog.py --help\r\nusage: prog.py [-h]\r\n\r\noptional arguments:\r\n  -h, --help  show this help message and exit\r\n$ prog.py --verbose\r\nusage: prog.py [-h]\r\nprog.py: error: unrecognized arguments: --verbose\r\n$ prog.py foo\r\nusage: prog.py [-h]\r\nprog.py: error: unrecognized arguments: foo<\/pre>\n<p>No exemplo seguinte, adiciona-se um argumento posicional, com informa\u00e7\u00e3o para a op\u00e7\u00e3o de <strong>help<\/strong>.<\/p>\n<pre>import argparse\r\nparser = argparse.ArgumentParser()\r\nparser.add_argument(\"echo\", help=\"echo the string you use here\")\r\nargs = parser.parse_args()\r\nprint(args.echo)<\/pre>\n<p>A fun\u00e7\u00e3o add_argument adiciona um argumento, e o par\u00e2metro <strong>help<\/strong> permite adicionar informa\u00e7\u00e3o de ajuda. Eis os resultados de utiliza\u00e7\u00e3o.<\/p>\n<pre>$ prog.py\r\nusage: prog.py [-h] echo\r\nprog.py: error: too few arguments\r\n\r\n$ prog.py -h\r\nusage: prog.py [-h] echo\r\n\r\npositional arguments:\r\n  echo        echo the string you use here\r\n\r\noptional arguments:\r\n  -h, --help  show this help message and exit\r\n\r\n$ prog.py ola\r\nola<\/pre>\n<p>De seguida, apresenta-se um exemplo com um argumento num\u00e9rico inteiro.<\/p>\n<pre>import argparse\r\n\r\nparser = argparse.ArgumentParser()\r\nparser.add_argument(\"square\", help=\"display a square of a given number\", type=int)\r\nargs = parser.parse_args()\r\nprint(args.square**2)<\/pre>\n<p>E algumas utiliza\u00e7\u00f5es desse c\u00f3digo:<\/p>\n<pre>$ prog.py 5\r\n25\r\n\r\n$ prog.py r\r\nusage: prog.py [-h] square\r\nprog.py: error: argument square: invalid int value: 'r'<\/pre>\n<p>Um exemplo de uso de par\u00e2metros opcionais:<\/p>\n<pre>import argparse\r\nparser = argparse.ArgumentParser()\r\nparser.add_argument(\"--verbosity\", help=\"increase output verbosity\", action=\"store_true\")\r\nargs = parser.parse_args()\r\nif args.verbosity:\r\n        print(\"verbosity turned on\")<\/pre>\n<p>Este programa n\u00e3o mostra nada se n\u00e3o houver par\u00e2metros. No entanto, ao passar-se o par\u00e2metro <strong>&#8211;verbosity<\/strong>, imprime a frase &#8220;verbosity turned on&#8221;. O par\u00e2metro <strong>action=&#8221;store_true&#8221;<\/strong> indica que se o argumento <strong>&#8211;verbosity<\/strong> for passado, o valor <strong>True<\/strong> \u00e9 atribu\u00eddo a <strong>args.verbose<\/strong>. Caso contr\u00e1rio \u00e9-lhe atribu\u00eddo <strong>False<\/strong>. Ver usos abaixo:<\/p>\n<pre>$ prog.py\r\n\r\n$ prog.py --verbosity\r\nusage: prog.py [-h] [--verbosity VERBOSITY]\r\nprog.py: error: argument --verbosity: expected one argument\r\n\r\n$ prog.py --verbosity 1\r\nverbosity turned on\r\n\r\n$ prog.py -h\r\nusage: prog.py [-h] [--verbosity VERBOSITY]\r\n\r\noptional arguments:\r\n  -h, --help            show this help message and exit\r\n  --verbosity VERBOSITY\r\n                        increase output verbosity\r\n<\/pre>\n<p>Por fim, um exemplo com par\u00e2metros opcionais e valores por omiss\u00e3o.<\/p>\n<pre>import argparse\r\n\r\nparser = argparse.ArgumentParser()\r\nparser.add_argument(\"palavra\", help=\"palavra a pesquisar nos discursos\")\r\nparser.add_argument(\"-c\", \"--componentes\", type=int, default=10, help=\"numero de componentes\")\r\nparser.add_argument(\"-w\", \"--words\", type=int, default=20, help=\"numero de top words a mostrar\")\r\nargs = parser.parse_args()\r\n\r\npalavra = args.palavra\r\nn_components = args.componentes\r\nn_top_words = args.words\r\n\r\nprint \"palavra = \" + palavra + \", n_components = \" + str(n_components) + \", n_top_words = \" + str(n_top_words)<\/pre>\n<p>E alguns usos:<\/p>\n<pre>$ prog.py xpto\r\npalavra = xpto, n_components = 10, n_top_words = 20\r\n\r\n$ prog.py xpto -c 12\r\npalavra = xpto, n_components = 12, n_top_words = 20\r\n\r\n$ prog.py xpto -c 12 -w 25\r\npalavra = xpto, n_components = 12, n_top_words = 25<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>O Python tem v\u00e1rias formas de gerir argumentos passados a um script. No stackoverflow indicam v\u00e1rios, com exemplos de utiliza\u00e7\u00e3o. Os exemplos seguintes usam o argparse, uma biblioteca standard, e parte deles foram retirados do Argparse Tutorial. import argparse parser = argparse.ArgumentParser() parser.parse_args() No exemplo anterior, utiliza-se a configura\u00e7\u00e3o m\u00ednima. A classe ArgumentParser cria um &hellip; <\/p>\n<p class=\"link-more\"><a href=\"http:\/\/python.w3.pt\/?p=224\" class=\"more-link\">Continuar a ler <span class=\"screen-reader-text\">&#8220;Argumentos para o script&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"_links":{"self":[{"href":"http:\/\/python.w3.pt\/index.php?rest_route=\/wp\/v2\/posts\/224"}],"collection":[{"href":"http:\/\/python.w3.pt\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/python.w3.pt\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/python.w3.pt\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/python.w3.pt\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=224"}],"version-history":[{"count":8,"href":"http:\/\/python.w3.pt\/index.php?rest_route=\/wp\/v2\/posts\/224\/revisions"}],"predecessor-version":[{"id":232,"href":"http:\/\/python.w3.pt\/index.php?rest_route=\/wp\/v2\/posts\/224\/revisions\/232"}],"wp:attachment":[{"href":"http:\/\/python.w3.pt\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=224"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/python.w3.pt\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=224"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/python.w3.pt\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=224"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}