Чтение stdin из канала |
отличается от чтения из файла <
, как вы заметили.
У меня нет ctconf
для проверки, хотя я знаю Python 3 имеет аналогичное поведение с трубопроводом. Итак, я покажу некоторые примеры с Python, которые могут работать с ctconf
.
Пакетный файл:
@prompt $G$S
rem 1. No escaping.
(echo 1111&echo 1111&echo 1111&echo 1111) | py test1.py
rem 2. Escape ampersand and end with a dummy command.
(echo 1111^&echo 1111^&echo 1111^&echo 1111^&echo:>nul) | py test1.py
rem 3. Escape ampersand, newline and end with a dummy command.
( echo 1111^&^
echo 1111^&^
echo 1111^&^
echo 1111^&^
echo:>nul
) | py test1.py
pause
Python файл test1.py:
# Use these inputs to catch the stdin.
in1 = input('input1: ')
in2 = input('input2: ')
in3 = input('input3: ')
in4 = input('input4: ')
# Add a newline as inputs display no newlines.
print('\n---')
# Repr is representation so the space can be seen.
print(repr(in1), repr(in2), repr(in3), repr(in4))
Запустите пакетный файл и выведите:
> rem 1. No escaping.
> (echo 1111 & echo 1111 & echo 1111 & echo 1111 ) | py test1.py
input1: input2: input3: input4:
---
'1111 ' '1111 ' '1111 ' '1111 '
> rem 2. Escape ampersand and end with a dummy command.
> (echo 1111&echo 1111&echo 1111&echo 1111&echo: 1>nul ) | py test1.py
input1: input2: input3: input4:
---
'1111' '1111' '1111' '1111'
> rem 3. Escape ampersand, newline and end with a dummy command.
> (echo 1111& echo 1111& echo 1111& echo 1111& echo: 1>nul ) | py test1.py
input1: input2: input3: input4:
---
'1111' '1111' '1111' '1111'
> pause
Press any key to continue . . .
Примечание: одинарные кавычки в выходных данных являются просто представлением строкового значения, а не самим значением.
В первом примере экранирование не выполнено, как в OP, а у выхода есть завершающий пробел, т. Е. '1111 '
.
Во втором примере экранируются от амперсандов и используется фиктивная команда для разрешения последнего экранирования. амперсанд, чтобы существовать, иначе вы получите конечный пробел с последним выходным значением.
3-й пример похож на 2-й пример, хотя экранирует новую строку, поэтому значения могут быть расположены построчно для более удобного просмотра.
Файл Python является лишь примером для отображения выходных данных, поэтому сосредоточьте внимание на коде пакетного файла о том, как устранить проходящий пробел с использованием канала |
.
Это как я решаю замыкающие пробелы с помощью пипина g и, возможно, другие, даже лучшие решения могут существовать.