Windows CMD Batch, START и перенаправление вывода


34

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

start python 1st.py arg1 arg2 > out.txt
start 2nd.exe %1 arg2 arg3

Пока программы работают должным образом, все выходные данные выводятся на стандартный вывод.


Это должно работать. Ничего не зная, мне интересно, делает ли 1st.py что-то смешное с выводом.
zpletan

Нет, но пишет в stderr.
нет

Вот почему - >только перенаправляет стандартный вывод (я думаю). В любом случае, похоже, у вас уже есть то, что вам нужно.
zpletan

Ответы:


35

Возможно, вам придется сделать это следующим образом:

start cmd /c python 1st.py arg1 arg2 ^> out.txt

Спасибо, но у меня это не работает (out.txt даже не создается в локальном каталоге)
нет

Я проверил это с помощью CScript и VBscript, поэтому идея звучит здраво. Вы делаете что-то «лишнее» в командной строке, которого нет в списке, например двойные кавычки?
Патрик Сеймур

Извините, что-то пошло не так - это работает!
нет

@ Патрик Сеймур, спасибо за ваш ответ! Как я могу сделать то же самое без файла .bat? Это не работает из cmd: python.exe ^> python_out.txt . У меня была ошибка: python.exe: невозможно открыть файл '>': [Errno 22] Неверный аргумент .
Neo

7

Перенаправление применяется к startкоманде, но почему-то не к cmd.exeэкземпляру, который она запускает.

Если >оператор сбежал, все должно работать:

start 1st.py arg1 arg2 ^> out.txt

(Если вы также хотите перенаправить stderr, используйте 2^>для этого.)


4
Спасибо, но у меня это не работает.
нет

5

Кроме того, если вы хотите перенаправить как stderr, так и stdout, это работает для меня

start call delay.bat ^ 1 ^> log.txt ^ 2 ^> ^ & ^ 1

Кажется, что каждого персонажа в основном нужно избегать. Эта команда обычно выглядит так:

delay.bat 1> log.txt 2> & 1


5

Что меня зацепило, так это перемещение команды в отдельный командный файл:

rem this first batch file triggers the second one:
start the_second.bat arg1 arg2 out.txt

the_second.bat тогда выглядит так:

python 1st.py %1 %2 > %3

Это очень неэффективный обходной путь по сравнению с правильным ответом.
Дэвид Постилл

2
«Правильный ответ» не работал для меня с похожей проблемой, и я подумал, что это может быть решение, о котором люди, по крайней мере, хотели бы узнать.
Флориан Штрауб,

Я должен не согласиться. Изучение правильного способа избежать символов в команде - намного лучшая идея.
DavidPostill

Пожалуйста, научите меня, как избежать присоединения вывода, используя >>.
Флориан Штрауб

Я уже сказал тебе. Прочитайте принятый ответ.
DavidPostill
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.