Как я могу получить командную строку, которую я ввел в терминал для запуска файла python?

1

Предположим, у меня есть файл 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?

Спасибо!

Теги:
command-line

2 ответа

0
Лучший ответ

Вы не всегда можете получить то, что вы набрали, потому что перед запуском вашего скрипта оболочка сначала выполнит замены и расширит имена файлов. Например, если вы python "foo.py" *.txt, ваш скрипт не увидит *.txt, он увидит список файлов, и он не увидит цитаты вокруг foo.py

С этим предостережением, в модуле sys есть переменная с именем argv которая содержит все аргументы. argv[0] - это имя скрипта.

Чтобы получить имя исполняемого файла python, вы можете использовать sys.executable.

Чтобы связать все это вместе, вы можете сделать что-то вроде этого:

print(sys.executable + " " + " ".join(sys.argv))
0

Почему бы просто не переделать команду, используя аргументы, которые вы проанализировали? Это не будет именно то, что вы набрали, но это может быть приятно, поскольку оно будет в общем формате.

Ex (предполагая, что скорость обучения и размер партии хранятся в одинаково названных переменных):

command = "python3 main.py --learning-rate {} --batch-size {}".format(learning_rate, batch_size) 

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

  • 0
    Спасибо! Я думаю, в некоторых случаях у меня есть некоторые необязательные параметры, поэтому использование sys может быть более полезным

Ещё вопросы

Сообщество Overcoder
Наверх
Меню