استدعاء برنامج Mathematica من سطر الأوامر، باستخدام وسيطات سطر الأوامر، وstdin، وstdout، وstderr

StackOverflow https://stackoverflow.com/questions/148057

سؤال

إذا كان لديك رمز Mathematica في foo.m، فيمكن استدعاء Mathematica باستخدامه -nopromptومع -initfile foo.m(أو -run "<<foo.m") ووسائط سطر الأوامر متوفرة في $CommandLine (مع وجود أشياء غير مرغوب فيها إضافية) ولكن هل هناك طريقة للحصول على بعض رموز الرياضيات مثل

#!/usr/bin/env MathKernel
x = 2+2;
Print[x];
Print["There were ", Length[ARGV], " args passed in on the command line."];
linesFromStdin = readList[];
etc.

وchmod أنه قابل للتنفيذ وتشغيله؟بمعنى آخر، كيف يمكن استخدام Mathematica مثل أي لغة برمجة نصية أخرى (Perl، Python، Ruby، إلخ)؟

هل كانت مفيدة؟

المحلول

MASH - Mathematica Scripting Hack - سوف يقوم بذلك.

منذ الإصدار 6 من Mathematica، يكفي نص Perl التالي:

http://ai.eecs.umich.edu/people/dreeves/mash/mash.pl

بالنسبة للإصدارات السابقة من Mathematica، هناك حاجة إلى برنامج C:

http://ai.eecs.umich.edu/people/dreeves/mash/pre6

تحديث:وأخيرًا، يدعم Mathematica 8 هذا الأمر محليًا باستخدام خيار سطر الأوامر "-script":

http://www.wolfram.com/mathematica/new-in-8/mathematica-shell-scripts/

نصائح أخرى

إليك الحل الذي لا يتطلب برنامجًا نصيًا مساعدًا إضافيًا.يمكنك استخدام shebang التالي لاستدعاء نواة Mathematica مباشرة:

#!/bin/sh
exec <"$0" || exit; read; read; exec /usr/local/bin/math -noprompt "$@" | sed '/^$/d'; exit
(* Mathematica code starts here *)
x = 2+2;
Print[x];

يتخطى كود shebang أول سطرين من البرنامج النصي ويغذي الباقي إلى Mathematica kernel كمدخل قياسي.ال سيد يسقط الأمر الأسطر الفارغة التي تنتجها النواة.

هذا الاختراق ليس متعدد الاستخدامات مثل الهريس.لأنه تتم قراءة رمز Mathematica منه com.stdin لا يمكنك استخدام com.stdin لإدخال المستخدم، أي الوظائف مدخل و سلسلة الإدخال لا تعمل.

يحاول
-initfile اسم الملف
ووضع أمر الخروج في البرنامج الخاص بك

بافتراض أنك قمت بإضافة ثنائيات Mathematica إلى متغير بيئة PATH في ~/.profile،

export PATH=$PATH:/Applications/Mathematica.app/Contents/MacOS

ثم ما عليك سوى كتابة سطر shebang هذا في نصوص Mathematica الخاصة بك.

#!/usr/bin/env MathKernel -script

الآن يمكنك وضع نقط مائلة على البرامج النصية الخاصة بك.

$ cat hello.ma
#!/usr/bin/env MathKernel -script

Print["Hello World!"]

$ chmod a+x hello.ma
$ ./hello.ma
"Hello World!"

تم اختباره باستخدام Mathematica 8.0.

خطأ بسيط:تحيط Mathematica الطباعة [المطبوعات] بعلامات اقتباس في Windows وMac OS X، ولكن ليس في Linux.ماهذا الهراء؟

لقد وجدت حلاً آخر يناسبني.

احفظ الكود في ملف .m، ثم قم بتشغيله هكذا:MathKernel -noprompt -run "<

هذا هو الرابط: http://bergmanlab.smith.man.ac.uk/?p=38

لمادة الرياضيات 7

$ cat test.m
#!/bin/bash
MathKernel -noprompt -run < <( cat $0| sed -e '1,4d' )  | sed '1d'
exit 0
### code start Here ... ###
Print["Hello World!"]
X=7
X*5

الاستخدام:

$ chmod +x test.m

$ ./test.m
"Hello World!"

7
35
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top