Предположим, у меня есть файл python main.py, и у него есть некоторые необязательные параметры: - clearning-rate, --batch-size и т.д.
Если я хочу запустить этот файл, я могу ввести следующее в терминал (например, Ubuntu Linux).
python3 main.py --learning-rate 0.1 --batch-size 100
И теперь я хочу написать некоторый код в main.py, чтобы после ввода команды выше я могу получить эту команду в строке, выполнив этот код. Ниже приведена строка, которую я хочу получить:
"python3 main.py - скорость чтения 0,1 - размер пакета 100"
Причина, по которой я хочу это сделать, это то, что я хочу записать эту строку в свой файл записи, чтобы я мог лучше знать, какую команду я запускал.
Может ли кто-нибудь сказать мне, какой пакет я должен импортировать, и какой код я должен писать, чтобы получить эту информацию команды во время запуска файла python?
Спасибо!
Вы не всегда можете получить то, что вы набрали, потому что перед запуском вашего скрипта оболочка сначала выполнит замены и расширит имена файлов. Например, если вы python "foo.py" *.txt
, ваш скрипт не увидит *.txt
, он увидит список файлов, и он не увидит цитаты вокруг foo.py
С этим предостережением, в модуле sys
есть переменная с именем argv
которая содержит все аргументы. argv[0]
- это имя скрипта.
Чтобы получить имя исполняемого файла python, вы можете использовать sys.executable
.
Чтобы связать все это вместе, вы можете сделать что-то вроде этого:
print(sys.executable + " " + " ".join(sys.argv))
Почему бы просто не переделать команду, используя аргументы, которые вы проанализировали? Это не будет именно то, что вы набрали, но это может быть приятно, поскольку оно будет в общем формате.
Ex (предполагая, что скорость обучения и размер партии хранятся в одинаково названных переменных):
command = "python3 main.py --learning-rate {} --batch-size {}".format(learning_rate, batch_size)
Конечно, будет немного сложнее, если некоторые команды являются необязательными, но я предполагаю, что в этом случае для этих параметров будет использоваться значение по умолчанию, так как ваша сеть будет нуждаться в этих параметрах каждый раз.
sys
может быть более полезным
sys.argv
содержит аргументы; точная строка, которая генерирует эти аргументы, не всегда доступна для Python, так как оболочка, возможно, обработала ее первой.