Windows CMD Пакетне перетворення, СТАРТ та перехід на вихід


34

Я хотів би запустити дві програми одночасно з пакетного файлу і перенаправити вихід першої програми в текстовий файл на зразок:

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

Поки програми працюють, як очікувалося, весь вихід відображається на stdout.


Це повинно працювати. Не знаючи нічого, мені цікаво, чи 1st.py робить щось смішне з виходом.
zpletan

Ні, але це пише до stderr.
немає

Ось чому - >тільки перенаправляє stdout (я думаю). У будь-якому випадку, схоже, у вас вже є те, що вам потрібно.
zpletan

Відповіді:


35

Можливо, вам доведеться зробити це так:

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

Дякую, але це не працює для мене (out.txt навіть не створений у локальному каталозі)
немає

Я перевірив це за допомогою CScript та VBscript, тому ідея є здоровою. Ви робите щось «зайве» у своєму командному рядку, який не вказаний тут, як подвійні лапки?
Патрік Сеймур

Вибачте, щось пішло не так - це працює!
немає

@Patrick Seymour, дякую за відповідь! Як я можу зробити те ж саме без файлу .bat? Це не працює з cmd: python.exe ^> python_out.txt . У мене виникла помилка: python.exe: не вдається відкрити файл '>': [Errno 22] Неправильний аргумент .
нео

7

Перенаправлення застосовується до startкоманди, але якось не до cmd.exeекземпляра, який вона працює.

Якщо >оператор не працює, все повинно працювати:

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

(Якщо ви також хочете перенаправити stderr, використовуйте 2^>його.)


4
Дякую, але це не працює для мене.
немає

5

Крім того, якщо ви хочете перенаправляти і stderr, і stdout, це працює для мене

початок затримки виклику.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

Це дуже неелегантне рішення порівняно з правильною відповіддю.
DavidPostill

2
"Правильна відповідь" не спрацювала для мене з подібною проблемою, і я подумав, що це може бути рішення, яке люди, принаймні, хочуть знати.
Флоріан Штрауб

Я повинен не погодитися. Навчитися правильному способу втечі символів у команді - набагато краща ідея.
DavidPostill

Будь ласка, навчіть мене, як уникнути приєднання виводу за допомогою >>.
Флоріан Штрауб

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