main.cmd:
@echo off
echo batch-file_args: %*
python.exe foo.py %*
foo.py:
import sys
print('python_args:', sys.argv[1:])
Команда тестирования 1 :
main. cmd
Вывод:
batch-file_args:
python_args: []
Нет аргументов в пакетном файле, поэтому %*
не определено, поэтому вы ничего не видите. Скрипт python не выводит аргументы, так как аргументы не передаются. []
- пустой список.
Тестовая команда 2 :
main.cmd 1 2 3 4
Вывод :
batch-file_args: 1 2 3 4
python_args: ['1', '2', '3', '4']
* Подставляется 1041 * и отображает все аргументы пакетного файла 1 2 3 4
. Аргументы передаются в сценарий python, и он отображает ['1', '2', '3', '4']
.
Таким образом, %*
, переданный в сценарий python, может работать с обоими тестами выше.
Зачем мне это здесь? Я протестировал файл без него, и он работал нормально.
foo.py
что у вас, вероятно, используются значения по умолчанию, если аргументы не переданы, поэтому он не жалуется.
Подумайте, есть ли в скрипте python строка типа var = sys.argv[1]
. Я добавлю его в код python для проверки.
foo.py:
import sys
print('python_args:', sys.argv[1:])
var = sys.argv[1]
Команда тестирования 3 :
main.cmd
Вывод:
batch-file_args:
python_args: []
Traceback (most recent call last):
File "foo.py", line 3, in <module>
var = sys.argv[1]
IndexError: list index out of range
Ой, жалуется на IndexError. %*
может быть важным, как указывает Traceback. Передаваемые аргументы не будут похожи на удаление %*
из командного файла.