का उपयोग करके WshShell.Exec से आउटपुट कैप्चरिंग मैंने निम्नलिखित दो फ़ंक्शंस लिखे हैं, और विंडोज स्क्रिप्ट होस्ट के अंदर चल रहे जावास्क्रिप्ट से दूसरा ("कॉल एंडवेट") कॉल किया है। मेरा समग्र इरादा एक कमांड लाइन प्रोग्राम को दूसरे से कॉल करना है। यही है, मैं cscript का उपयोग कर प्रारंभिक स्क्रिप्टिंग चला रहा हूं, और फिर उस स्क्रिप्ट से कुछ और (एंट) चलाने की कोशिश कर रहा हूं।विंडोज स्क्रिप्ट होस्ट
function readAllFromAny(oExec)
{
if (!oExec.StdOut.AtEndOfStream)
return oExec.StdOut.ReadLine();
if (!oExec.StdErr.AtEndOfStream)
return "STDERR: " + oExec.StdErr.ReadLine();
return -1;
}
// Execute a command line function....
function callAndWait(execStr) {
var oExec = WshShell.Exec(execStr);
while (oExec.Status == 0)
{
WScript.Sleep(100);
var output;
while ((output = readAllFromAny(oExec)) != -1) {
WScript.StdOut.WriteLine(output);
}
}
}
दुर्भाग्य से, जब मैं अपने कार्यक्रम चलाने, मैं नहीं क्या कहा जाता कार्यक्रम कर रहा है के बारे में तत्काल प्रतिक्रिया मिलता है। इसके बजाए, आउटपुट फिट बैठता है और शुरू होता है, कभी-कभी मूल प्रोग्राम समाप्त होने तक प्रतीक्षा करता है, और कभी-कभी ऐसा लगता है कि ऐसा लगता है। मैं वास्तव में क्या करना चाहता हूं, क्या स्पॉन्ड प्रक्रिया वास्तव में कॉलिंग प्रक्रिया के रूप में एक ही स्टडऑट साझा करती है, लेकिन मुझे ऐसा करने का कोई तरीका नहीं दिखता है। बस oExec.StdOut = WScript.StdOut सेट नहीं करता है।
वहाँ प्रक्रियाओं है कि शुरू की प्रक्रिया के stdout & stderr साझा करेंगे अंडे देने के लिए एक वैकल्पिक तरीका है? मैंने "WshShell.Run() का उपयोग करने का प्रयास किया, लेकिन यह मुझे" अनुमति अस्वीकार "त्रुटि देता है। यह समस्याग्रस्त है, क्योंकि मैं अपने क्लाइंट को यह बदलने के लिए नहीं कहना चाहता कि कैसे उनके विंडोज वातावरण को मेरे प्रोग्राम को चलाने के लिए कॉन्फ़िगर किया गया है।
मैं क्या कर सकता है?
मुझे नहीं लगता कि वहाँ यह करने के लिए एक रास्ता है, मैं खोज रहा है। मेरा 'समाधान' एक ऐसा फ़ंक्शन है जो एक कमांड को प्रीपेड करता है जो प्रत्येक बार कमांड कहलाता है, जैसे WShell.Exec ("% COMSPEC% setenvvars.bat और actual_program.exe") में आवश्यक वातावरण चर सेट करता है। काफी गुंजाइश – Roel