У меня есть небольшой скрипт для вывода sys.argv
(используется для отладки ввода в argparse
):
2303:~/mypy$ cat echo.py
import sys
print(sys.argv)
Если я его запусту, с опцией python '-i', я я оставлен в сеансе интерпретатора с sys
доступно:
2303:~/mypy$ python3 -i echo.py foo bar
['echo.py', 'foo', 'bar']
>>> sys.argv
['echo.py', 'foo', 'bar']
>>>
<exit>
или простой скрипт с использованием argparse
:
import argparse
p = argparse.ArgumentParser()
p.add_argument('-p')
p.add_argument('foo')
args = p.parse_args()
print(args)
Запуск с '-i':
2313:~/mypy$ python3 -i stack60625769.py -p foo bar
Namespace(foo='bar', p='foo')
>>> p
ArgumentParser(prog='stack60625769.py', usage=None, description=None, formatter_class=<class 'argparse.HelpFormatter'>, conflict_handler='error', add_help=True)
>>> args
Namespace(foo='bar', p='foo')
>>>
Я обычно работаю в сеансе ipython
. Оттуда я могу %run
сценарий:
2312:~/mypy$ inumpy3
Python 3.6.9 (default, Nov 7 2019, 10:44:02)
Type 'copyright', 'credits' or 'license' for more information
IPython 7.11.1 -- An enhanced Interactive Python. Type '?' for help.
In [1]: %run stack60625769.py -p foo bar
Namespace(foo='bar', p='foo')
In [2]: args
Out[2]: Namespace(foo='bar', p='foo')
In [3]: p
Out[3]: ArgumentParser(prog='stack60625769.py', usage=None, description=None, formatter_class=<class 'argparse.HelpFormatter'>, conflict_handler='error', add_help=True)
Я мог бы снова запустить этот анализатор с пользовательским argv
(а не с тем, который начал сеанс ipython
:
In [9]: p.parse_args('foo -p bar'.split())
Out[9]: Namespace(foo='foo', p='bar')
%run
имеет различные параметры пространства имен. По умолчанию сценарий запускается в новом пространстве имен, но обновляется интерактив с его значениями.