سؤال

وكيف يمكنك استدعاء الأوامر قذيفة من صرير وPharo؟ هل هذه البيئات لها أي شيء في نفوسهم مثل وظيفة النظام () في بعض اللغات يونيكس لتشغيل الأوامر قذيفة الخارجية، أو backticks (لا يمكن جعلها هنا القيام به لمحرر، ولكن ما الذي تحصل عليه عندما تضغط على اليسار رئيسيا لل" (1) "وأعلاه" TAB ") للقبض على إخراج الأوامر؟

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

المحلول

في صرير يمكنك استخدام CommandShell ، ولكن أنا لا أعرف ما (إذا كان أي شيء ) يتوفر للPharo في هذا الوقت.

نصائح أخرى

واعتقد انه يمكن استخدام OSProcess حزمة لتفعل ما تريد. وبالإضافة إلى ذلك، أعتقد أنه من الأفضل أن نسأل في صرير ديف أو قائمة بريدية pharo.

ودعم شركة شل في صرير / Pharo محدودة جدا. وهناك خطط للحصول على هذا التحسين؛ انظر كورال <لأ href = "http://smalltalkhub.com/#! / ~ PharoExtras / كورال "يختلط =" نوفولو noreferrer "> مشروع . مساهماتكم هي موضع ترحيب.

لديك حلين:

استخدم حزمة ProcessWrapper. الإيجابيات: سريعة وسهلة التركيب. سلبيات: وظائف محدودة، فقط على Win32

استخدم حزمة OSProcess / CommandShell. الايجابيات: وظيفة جيدة (الأنابيب، فار البيئة، مثل قذيفة مساحة العمل ...)، وعبر منصة. سلبيات: يجب استخدام أدوات VMMaker لبناء المساعد خارجي

وأنا باستخدام ويندوز 10 مع Pharo 6، وجدت أنه من غير مجدية لاستخدام OSProcess أو OSSubprocess الطبقات (الثابت لتثبيت أو أحدث الإصدارات غير معتمدة ويندوز).

وماذا العمل بالنسبة لي هو LIBC. يمكنك إعادة توجيه ستدير إلى ملف باستخدام 2> داخل الأمر:

errors := '/tmp/errors.txt'.
result := LibC uniqueInstance system: 
    'echo "Hello World" > /tmp/hello.txt 2>', errors.
result = 0 ifFalse: [ errors asFileReference ]

ومن الممكن التعامل مع متغيرات البيئة باستخدام (على الرغم من أنها تقوم بإرجاع قيمة من 1 يعني فشل في ويندوز):

   OSEnvironment current setEnv: 'MY_ENVIRONMENT_VARIABLE' value: '1'.

ولكن، لم أتمكن من تغيير الدليل الحالي:

OSEnvironment current changeDirectoryTo: myDirectory asFileReference. "--> doesNotUnderstand for Windows"

والحل هو أن تفعل CD في الأمر:

result := LibC uniqueInstance system: 
    'cd ', myDirectory, ' && ls > /tmp/output.txt 2>', errors.

في ويندوز، وهناك مجمع على API فوز يسمح لك أن تفعل هذا:

| sqlPlusExe sqlPlusRunInDir scriptPathString| 

scriptPathString := (FileLocator imageDirectory / 'data' / 'sqlplus' / 'testquit.sql') pathString.

sqlPlusExe :='C:\oraclexe\app\oracle\product\11.2.0\server\bin\sqlplus.exe /nolog @' , scriptPathString.
sqlPlusRunInDir := 'C:\oraclexe\app\oracle\product\11.2.0\server\bin'.

sqlPlusWinProcessInformation := WinProcess 
        createAndWaitForProcess: sqlPlusExe 
        withCurrentDirectory: sqlPlusRunInDir 

وهناك الكثير من الدعم لمعظم ما يمكن ل Windows القيام بعمليات في وجود (الحياة الفطرية، ...)

وهكذا، ابحث في كتالوج لOSWindows.

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