Вызов программы из командной строки - PullRequest
2 голосов
/ 04 октября 2011

У меня есть исполняемый файл, который при двойном щелчке открывается в окне командной строки. enter image description here

Теперь в том же каталоге, где находится исполняемый файл apame_win64, находится входной файл (то есть с именем "phere_15000.inp ").exe находится.Таким образом, мы можем ввести имя файла в командной строке.enter image description here

Вопрос в том, как это можно сделать из интерфейса mathematica?С помощью команды RunThrough я попытался сделать это безрезультатно.

RunThrough["Executable Location", "sphere_15000"]

Нужно ли мне помещать это местоположение файла в переменную пути среды Windows 7?Надеюсь на какое-то предложение по этому поводу.

ОБНОВЛЕНИЕ

Нашел решение моей проблемы.

  1. Сначала установите Mathematicaкаталог, в котором находится исполняемый файл.

    path = "C: \ Users \ FlowCrusher \ Desktop \ CUSP solver \ Apame_build_2011_01_09 \ solver";SetDirectory [путь];

  2. Затем используйте следующий стиль ввода.

    Запустите ["\" \ "apame_win64.exe \" \ "input \" \ ""]

Здесь" apame_win64.exe "- исполняемый файл, который нужно запустить, а" input "- входной файл для исполняемого файла.Это решает проблему.Но новый элемент в списке пожеланий.

Есть ли способ скрыть окно консоли на заднем плане?

Вот как это выглядит на моем экране.enter image description here

Как предложил Крис, если мы используем минимизированную консоль в команде «Выполнить», мы получаем свернутое окно, но программа не выполняется.

enter image description here

Надеюсьчто решение существует.

BR

Ответы [ 3 ]

4 голосов
/ 04 октября 2011

Да, вы можете поместить папку вашего исполняемого файла в переменную Path или указать полное имя пути.

Однако RunThrough, похоже, был заменен (в Windows) Import ["! Command", "Text"], который выполнит команду и прочитает вывод строки comaand в Matheamtica как строку. E.g.:

Export["testit.txt", "bla", "Text"];
Import["!dir" <> " testit* > dir.log", "Text"];
FilePrint["dir.log"]

-

В противном случае у меня также были хорошие результаты в прошлом при использовании NETLink (не уверен, что WScript.shell все еще работает на Windows7 / 8 или если нужно использовать что-то еще). Запуск эмуляции (я думаю, что RunThrough на самом деле не нужен):

Run2[cmd_String] := Module[{shell},
    Switch[$OperatingSystem,
        "Windows",
            Needs["NETLink`"];
            shell = NETLink`CreateCOMObject["WScript.shell"];
            shell @ run[cmd,0,True],
        "Unix",
            Run @ cmd, 
        "MacOSX",
            Run @ cmd ] ];
3 голосов
/ 04 октября 2011

Можете ли вы запустить свое приложение с помощью ввода из основного командного окна вместо консоли приложения?Это может быть форма команды, которая вам понадобится:

apame_win64 -input sphere_15000.inp

или просто

apame_win64 sphere_15000.inp

Возможно, вы можете проверить доступные переключатели, выполнив apame_win64 -help

AМногокомпонентная команда может быть запущена из Mathematica, например,

Run["type c:\\temp\\test.txt"]

В качестве альтернативы, также возвращая вывод в сеанс Mathematica:

ReadList["!type c:\\temp\\test.txt", String]
0 голосов
/ 12 декабря 2013

Я приземлился здесь, желая запустить командную строку abaqus в Windows .

Решения, предоставленные здесь , сработали для меня (Windows 7, Mathematica 9):

SetDirectory@path;
Run["start /min abaqus job=" <> fileName <> " interactive  ask_delete=OFF >> log.txt"]

(Здесь опция abaqus ask_delete = OFF перезаписывает существующие результаты моделирования, а >> перенаправляет весь вывод в файл)

Я думаю, что сворачивание окна не выполнялось в вашемслучай, поскольку исполняемый файл открывает это окно.В этом случае этот может быть полезен

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...