2016-07-27 24 views
0

Недавно я обнаружил (к моему удивлению), вы можете вызвать аргументы командной строки в файлах, отличных от тех, которые явно вызываются при вводе.Использование командной строки args из разных файлов в python

Итак, вы можете запустить python file1.py abc в командной строке и использовать sys.argv [1], чтобы получить строку 'abc' из файла file2.py или file3.py.

Я все еще чувствую, что это не должно работать, но я рад, что это так, потому что это спасло меня от многих неприятностей.

Но теперь я очень благодарен за ответ, почему и как это работает. Я предположил, что sys.argv [1] будет локальным для каждого файла.

+1

Я не уверен, что вы имеете в виду ... sys.argv содержит аргументы командной строки при запуске программы ... и ее глобально доступной ... –

ответ

2

Как и почему, sys импортируется только один раз (при запуске python). Когда импортируется sys, его член argv заселяется аргументами командной строки. Последующие операторы import возвращают тот же объект sys, поэтому вне зависимости от того, где вы import sys, вы всегда получите тот же объект, и поэтому sys.argv всегда будет тем же самым списком, независимо от того, где вы ссылаетесь на него в своем приложении.


ли вы должны делать синтаксический разбор командной строки в более чем одном месте, это другой вопрос. Как правило, мой ответ будет «НЕТ», если только вы не будете взламывать скрипт для работы в течение следующих 2 или 3 дней. Все, что вы ожидаете от последнего, должно делать все, что нужно для анализа (возможно, с сильным парсером аргументов, например argparse) и передавать данные, необходимые для различных функций/классов, из них.

+0

Казалось бы, я неправильно понял, как работает импорт. Хорошо знать! Благодаря! Это не временный взлом, но предназначен только для внутреннего использования для отладки. Тем не менее, я собираюсь дать попытку попробовать, как вы предлагаете. Я вижу, что он также позволит мне использовать флаги для определенных аргументов cmd line, что было бы полезной функцией, о которой я не думал. –

Смежные вопросы