Запуск консольных приложений из одного окна

Обсуждение программ nnCron и nnCron LITE

Запуск консольных приложений из одного окна

Postby spronkin » Mon, 08 Sep 2014, 12:59

Здравствуйте!
Имеется следующая задача:
Code: Select all
#( tiffcp
NoActive
Action:
FILESONLY
FOR-FILES: "z:\var\www\downloads\out2\*.tif"
    SWHide
    START-APPW: cmd /c "c:\nncron\GnuWin32\bin\tiffcp.exe" -c g4 %FOUND-FULLPATH% %FOUND-FULLPATH%2
    ShowNormal
    FILE-DELETE: "%FOUND-FULLPATH%"
    FILE-RENAME: "%FOUND-FULLPATH%2" "%FOUND-FULLPATH%"
;FOR-FILES

в которой окно командной строки появляется всякий раз при обработке очередного файла. Нельзя ли сделать так, чтобы окно cmd.exe запускать только один раз, а далее уже в него передавать очередную команду с предопределенными переменными nncron ("c:\nncron\GnuWin32\bin\tiffcp.exe" -c g4 %FOUND-FULLPATH% %FOUND-FULLPATH%2). Я хотел бы сэкономить ресурсы системы, чтобы всякий раз не появлялось новое консольное окно, а все команды выполнялись бы в одном консольном окне. Как будет выглядеть подобная задача?
User avatar
spronkin
 
Posts: 86
Joined: Sun, 15 Jan 2012, 13:56

Re: Запуск консольных приложений из одного окна

Postby VoidVolker » Mon, 08 Sep 2014, 19:00

Передать в командной строке tiffcp сразу все файлы для обработки или реализовать данную функцию в ннкрон. Что оно делает?
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Re: Запуск консольных приложений из одного окна

Postby spronkin » Wed, 10 Sep 2014, 00:23

VoidVolker wrote:Передать в командной строке tiffcp сразу все файлы для обработки или реализовать данную функцию в ннкрон. Что оно делает?

tiifcp изменяет метод сжатия входного изображения в формате TIFF, в данном случае на CCITT Group4 (исходные изображения у меня сжаты по методу ZIP)
Code: Select all
usage: tiffcp [options] input... output
where options are:
 -a             append to output instead of overwriting
 -o offset      set initial directory offset
 -p contig      pack samples contiguously (e.g. RGBRGB...)
 -p separate    store samples separately (e.g. RRR...GGG...BBB...)
 -s             write output in strips
 -t             write output in tiles
 -i             ignore read errors
 -b file[,#]    bias (dark) monochrome image to be subtracted from all others
 -,=%           use % rather than , to separate image #'s (per Note below)

 -r #           make each strip have no more than # rows
 -w #           set output tile width (pixels)
 -l #           set output tile length (pixels)

 -f lsb2msb     force lsb-to-msb FillOrder for output
 -f msb2lsb     force msb-to-lsb FillOrder for output

 -c lzw[:opts]  compress output with Lempel-Ziv & Welch encoding
 -c zip[:opts]  compress output with deflate encoding
 -c jpeg[:opts] compress output with JPEG encoding
 -c packbits    compress output with packbits encoding
 -c g3[:opts]   compress output with CCITT Group 3 encoding
 -c g4          compress output with CCITT Group 4 encoding
 -c none        use no compression algorithm on output

В том то и дело, что передать программе tiffcp сразу все файлы для обработки в пакетном режиме нельзя, если использовать команду:
Code: Select all
tiifcp.exe -c g4 str001.tif str002.tif str003.tif out.tif
,
это приведет к созданию многостраничного (в данном случае трех-) tif файла, а при выполнении
Code: Select all
tiifcp.exe -c g4 str001.tif str002.tif str003.tif out.tif

программа выдаст ошибку, о чем и говорит синтаксис использования в хелпе.
Но я вопрос здесь ставлю не об этом, а о том, возможно ли вообще средствами nncron создать одно системное консольное окно win32 и в каждом проходе цикла туда направлять команды со значениями, берущимися из предопределенных переменных nncron, а-ля %FOUND-FULLPATH%, а не создавать при каждом проходе новое консольное окно, как в представленной мной задаче выше.
PS: Дело в том, что очень часто приходится использовать nncron совместно с консольными приложениями unixutils или gnuwin32, как здесь, и не желательно вызывать каждую минуту сотни окон cmd.exe для их выполнения.
PS2: tiffcp в START-APPW можно вообще выполнять с параметрами без cmd /c?
User avatar
spronkin
 
Posts: 86
Joined: Sun, 15 Jan 2012, 13:56

Re: Запуск консольных приложений из одного окна

Postby AlikasS » Wed, 10 Sep 2014, 03:02

spronkin wrote:PS2: tiffcp в START-APPW можно вообще выполнять с параметрами без cmd /c?

что мешает попробовать? :)

SWHide не отрабатывает у тебя?

P.S. как вариант, сформировать кроном батник и потом запустить
User avatar
AlikasS
 
Posts: 1434
Joined: Wed, 28 Jun 2006, 05:39
Location: Khabarovsk

Re: Запуск консольных приложений из одного окна

Postby VoidVolker » Wed, 10 Sep 2014, 07:50

spronkin wrote:tiffcp в START-APPW можно вообще выполнять с параметрами без cmd /c

Конечно. Ведь это cmd и создает второе окно. В данном случае идет запуск CMD - это окно скрывается ннкроном, а оно запускает программу и создает новое окно.
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Re: Запуск консольных приложений из одного окна

Postby spronkin » Wed, 10 Sep 2014, 12:33

Сорри за невнимательность,
spronkin wrote: а при выполнении
Code: Select all
tiifcp.exe -c g4 str001.tif str002.tif str003.tif out1.tif out2.tif out3.tif

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

alikas, SWHide отрабатывает (про регистр в курсе), за идею с бантиком спасибо, то, что надо! Сначала FAPPEND'ом сгенерирую батник, а потом уже запущу его.
VoidVolker,
Code: Select all
START-APPW: "c:\nncron\GnuWin32\bin\tiffcp.exe" -c g4 %FOUND-FULLPATH% %FOUND-FULLPATH%2

действительно выполняется.
User avatar
spronkin
 
Posts: 86
Joined: Sun, 15 Jan 2012, 13:56

Re: Запуск консольных приложений из одного окна

Postby VoidVolker » Wed, 10 Sep 2014, 18:51

spronkin wrote:alikas, SWHide отрабатывает (про регистр в курсе), за идею с бантиком спасибо, то, что надо! Сначала FAPPEND'ом сгенерирую батник, а потом уже запущу его.

Эмм... Это будет как рза то самое нерациональное использование системных ресурсов. Никаких cmd или бантиков не нужно. Сразу запускать программу с парамтерами.
spronkin wrote:действительно выполняется.

Само-собой будет работать. Ведь START-APP как раз и запускает программы.
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Re: Запуск консольных приложений из одного окна

Postby spronkin » Wed, 10 Sep 2014, 20:33

Да. но если не использую SWHide, при выполнении START-APPW любого консольного приложения, даже без cmd /c, все равно появляется консольное окно. Получается, что SWHide только скрывает появление очередного консольного окна или нет? Я не понимаю - может SWHide действительно блокирует его графический вывод на экран и тем самым экономит системные ресурсы?
User avatar
spronkin
 
Posts: 86
Joined: Sun, 15 Jan 2012, 13:56

Re: Запуск консольных приложений из одного окна

Postby VoidVolker » Wed, 10 Sep 2014, 21:35

spronkin wrote:Да. но если не использую SWHide, при выполнении START-APPW любого консольного приложения, даже без cmd /c, все равно появляется консольное окно.

Значит, что-то делается не так, т.к. все работает отлично.
spronkin wrote:Получается, что SWHide только скрывает появление очередного консольного окна или нет? Я не понимаю - может SWHide действительно блокирует его графический вывод на экран и тем самым экономит системные ресурсы?

SWHide - это опция отображения окна при запуске программы. Передается специальный флаг в апи вызов, который говорит винде, что окно программы не надо показывать.
И зачем в скрипте после START-APPW указывается опция ShowNormal, когда эту опцию надо использовать перед? А перед - SWHide. Это противоположные друг другу опции.
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Re: Запуск консольных приложений из одного окна

Postby spronkin » Wed, 10 Sep 2014, 22:38

VoidVolker wrote:
spronkin wrote:Да. но если не использую SWHide, при выполнении START-APPW любого консольного приложения, даже без cmd /c, все равно появляется консольное окно.

Значит, что-то делается не так, т.к. все работает отлично.

В смысле? Вы хотите сказать. что задача:
Code: Select all
#( tiffcp
NoActive
Action:
FILESONLY
FOR-FILES: "z:\var\www\downloads\out2\*.tif"
   START-APPW: "c:\nncron\GnuWin32\bin\tiffcp.exe" -c g4 %FOUND-FULLPATH% %FOUND-FULLPATH%2
   FILE-DELETE: "%FOUND-FULLPATH%"
   FILE-RENAME: "%FOUND-FULLPATH%2" "%FOUND-FULLPATH%"
;FOR-FILES
)#

не должна приводить к появлению консольного окна?
У меня консольное окно не появляется только в том случае. если выполнение START-APPW я предваряю SWHide:
Code: Select all
#( tiffcp
NoActive
Action:
FILESONLY
FOR-FILES: "z:\var\www\downloads\out2\*.tif"
    SWHide
    START-APPW: "c:\nncron\GnuWin32\bin\tiffcp.exe" -c g4 %FOUND-FULLPATH% %FOUND-FULLPATH%2
    ShowNormal
    FILE-DELETE: "%FOUND-FULLPATH%"
    FILE-RENAME: "%FOUND-FULLPATH%2" "%FOUND-FULLPATH%"
;FOR-FILES

хотя так наверное будет лучше:
Code: Select all
#( tiffcp
NoActive
Action:
FILESONLY
SWHide
FOR-FILES: "z:\var\www\downloads\out2\*.tif"
    START-APPW: "c:\nncron\GnuWin32\bin\tiffcp.exe" -c g4 %FOUND-FULLPATH% %FOUND-FULLPATH%2
    FILE-DELETE: "%FOUND-FULLPATH%"
    FILE-RENAME: "%FOUND-FULLPATH%2" "%FOUND-FULLPATH%"
;FOR-FILES
ShowNormal
)#


VoidVolker wrote:И зачем в скрипте после START-APPW указывается опция ShowNormal, когда эту опцию надо использовать перед? А перед - SWHide. Это противоположные друг другу опции.

Что вы хотите сказать? Почему ShowNormal надо использовать перед START-APPW? А SWHide перед чем? Что вы имеете ввиду?
User avatar
spronkin
 
Posts: 86
Joined: Sun, 15 Jan 2012, 13:56

Re: Запуск консольных приложений из одного окна

Postby VoidVolker » Thu, 11 Sep 2014, 06:36

spronkin wrote:Что вы хотите сказать?

Я хочу сказать, что мануал читать надо.
spronkin wrote:Почему ShowNormal надо использовать перед START-APPW?

Потому что это опция запуска приложений для слова START-APP[W], а конкретно - состояние окна. Она устанавливает специальный флаг. Попытка использовать эту опцию уже после запуска приложения не даст никакого эффекта.
spronkin wrote:А SWHide перед чем? Что вы имеете ввиду?

Вот здесь все подробно написано: http://www.nncron.ru/help/RU/commands/s ... tm#options
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Re: Запуск консольных приложений из одного окна

Postby spronkin » Thu, 11 Sep 2014, 21:58

Теперь понятно, раз нет никакого эффекта, ShowNormal можно не использовать, да я делал это неправильно. Но SWHide я использовал до запуска приложения, поэтому консольное окно не появилось.
User avatar
spronkin
 
Posts: 86
Joined: Sun, 15 Jan 2012, 13:56

Re: Запуск консольных приложений из одного окна

Postby ANR Daemon » Sat, 13 Sep 2014, 01:20

spronkin wrote:PS2: tiffcp в START-APPW можно вообще выполнять с параметрами без cmd /c?

Это проблема самого nnCron.
ANR Daemon
 
Posts: 234
Joined: Mon, 26 Feb 2007, 22:59

Re: Запуск консольных приложений из одного окна

Postby spronkin » Sat, 25 Apr 2015, 00:09

spronkin wrote:PS2: tiffcp в START-APPW можно вообще выполнять с параметрами без cmd /c?

Сорри за некропост, но у меня не работает следующий Action:
Code: Select all
#( mediainfo
    SingleInstance
    Action:
            START-APPW: MediaInfo\MediaInfo.exe "e:\Ducks.Take.Off.720p.1080p.2160p.QHD.TEST.DEMO.x264-CtrlHD\Ducks.Take.Off.2160p.QHD.CRF25.x264-CtrlHD.mkv" | sed -e "s/\x20*:\x20/\x09/;/^[\s\x09]*$/d;/\x09/!s/$/\x09/" > out.txt
)#

точнее в слове START-APPW отрабатывает только первая часть команды до знака вертикальной черты пайпа "|" (MediaInfo\MediaInfo.exe "e:\Ducks.Take.Off.720p.1080p.2160p.QHD.TEST.DEMO.x264-CtrlHD\Ducks.Take.Off.2160p.QHD.CRF25.x264-CtrlHD.mkv" ), я вижу в течение доли секунды ее вывод на экране, после чего консольное окно исчезает, остальная часть команды в слове START-APPW не отрабатывает. А вот если я заключаю всю команду в кавычки и обрамляю в cmd /c
Code: Select all
#( mediainfo
    SingleInstance
    Action:
            START-APPW: cmd /c "MediaInfo\MediaInfo.exe "e:\Ducks.Take.Off.720p.1080p.2160p.QHD.TEST.DEMO.x264-CtrlHD\Ducks.Take.Off.2160p.QHD.CRF25.x264-CtrlHD.mkv" | sed -e "s/\x20*:\x20/\x09/;/^[\s\x09]*$/d;/\x09/!s/$/\x09/" > out.txt"
)#

то вся команда отрабатывает успешно.
Можно ли как-то выполнить команду в START-APPW без cmd /c? Может быть надо как-то экранировать символ |? Я пробовал делать \| , но безуспешно.
User avatar
spronkin
 
Posts: 86
Joined: Sun, 15 Jan 2012, 13:56

Re: Запуск консольных приложений из одного окна

Postby ANR Daemon » Sat, 25 Apr 2015, 00:10

spronkin wrote:Можно ли как-то выполнить команду в START-APPW без cmd /c? Может быть надо как-то экранировать символ |? Я пробовал делать \| , но безуспешно.

Пост над вашим. Читали, не?
viewtopic.php?f=5&t=13120&view=unread#p34512
ANR Daemon
 
Posts: 234
Joined: Mon, 26 Feb 2007, 22:59

Next

Return to nnCron forum (Russian)

Who is online

Users browsing this forum: No registered users and 1 guest