Вызов интерпретатора Python с «-c» и проблемы с отступами - PullRequest
4 голосов
/ 29 декабря 2010

Я пытаюсь вызвать Python, используя аргумент "-c", чтобы позволить мне легко выполнить какой-то произвольный код Python, например: python.exe -c "for idx in range(10): print idx" Теперь этот код работает нормально из моего командного файла, однако яЯ сталкиваюсь с проблемами, когда я хочу сделать что-то большее, чем это.

Рассмотрим следующий код Python:

foo = 'bar'
for idx in range(10):
    print idx

это даст вам 0-9 в stdout.Однако, если я сверну это в одну строку, используя точки с запятой в качестве разделителей, получу следующее:

foo = 'bar';for idx in range(10):    print idx

и попытаюсь запустить его с помощью python.exe -c, это вызовет SyntaxError:

C:\Python>python.exe -c "foo = 'bar';for idx in range(10):    print idx"
  File "<string>", line 1
    foo = 'bar';for idx in range(10):    print idx
                  ^
SyntaxError: invalid syntax

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

Я запускаю это из пакетного файла .cmd, с помощью метода вызова следующим образом:

call python.exe -c "blah blah"

с той же генерируемой ошибкой.

Ответы [ 2 ]

3 голосов
/ 29 декабря 2010

Вам необходимо ввести командную строку в качестве многострочного аргумента. С linux это так же просто, как использовать клавишу ввода, например (обратите внимание, что bash добавляет символы >, мне не нужно было их набирать):

$ python -c "foo = 'bar'
> for idx in range(10):
>     print idx"

В Windows, однако, вам нужно набрать клавишу ^, прежде чем нажать Enter, и оставить пустую строку, чтобы получить символ новой строки, например, (More? добавлено cmd)

C:\> python.exe -c "foo = 'bar'^
More? 
More? for idx in range(10):^
More? 
More?     print idx"
2 голосов
/ 29 декабря 2010

Используйте новую строку для разделения операторов. Вот как я ввел его в оболочку:

$ python -c "foo = 'bar'
for idx in range(10): print idx"

То, что вы написали, не работает, потому что точка с запятой связывает сильнее, чем двоеточие, поэтому запутывается. Напротив, это работает, например:

$ python -c "foo = 'bar'; print foo"
...