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^>для этого.)

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

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

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

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

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

Sandos
источник
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