Say есть код C++, который я компилируется в исполняемый файл с помощью:Запуск исполняемых файлов с помощью Haskell
g++ test.cpp -o testcpp
Я могу запустить это с помощью терминала (я использую OS X), и обеспечивают входной файл для обработки внутри программы на C++, как:
./testcpp < input.txt
Мне было интересно, если делать это возможно, от в Haskell. Я слышал о функции readProcess
в модуле System.Process
. Но это только позволяет запускать команды командной оболочки.
Делать это:
out <- readProcess "testcpp" [] "test.in"
или:
out <- readProcess "testcpp < test.in" [] ""
или:
out <- readProcess "./testcpp < test.in" [] ""
выкидывает эту ошибку (или что-то очень похожи в зависимости от того, какой из вышеперечисленных я использую):
testcpp: readProcess: runInteractiveProcess: exec: does not exist (No such file or directory)
Так что мой вопрос: может ли это сделать из Haskell. Если да, то каким образом и какие модули/функции я должен использовать? Благодарю.
EDIT
Хорошо, так, как предложил Дэвид, я удалил входные аргументы и попытался запустить его. Выполнение этой работы:
out <- readProcess "./testcpp" [] ""
Но я все еще придерживаюсь ввода данных.
В первой части, вы исполняемым с именем 'test' и во второй части вы пытаетесь для запуска исполняемого файла с именем 'testcpp'. Это верно? Также я думаю, вам нужно прочитать содержимое 'test.in', а затем передать эту строку в качестве последнего аргумента, вместо того, чтобы указывать имя файла. –
@DavidYoung Да, я просто представил общие примеры того, что я пытался сделать. Но, похоже, это путано, я его отредактировал. Что касается второй части вашего комментария, вы не совсем поняли. AFAIK, проблема заключается в запуске самого файла exec, а не с предоставлением входных аргументов. – Roshnal
вы всегда можете создать файл со сценарием оболочки и запустить * it *. –