आउटपुट "स्ट्रीमिंग" मैं एफ # से एक प्रक्रिया शुरू करने की कोशिश कर रहा हूं, इसे समाप्त होने तक प्रतीक्षा करें, लेकिन इसके आउटपुट को क्रमशः पढ़ें।एक प्रक्रिया को सिंक्रनाइज़ेशन से शुरू करना, और आउटपुट
क्या यह करने का यह सही/सबसे अच्छा तरीका है? (मेरे मामले में मैं Git आदेश पर अमल करने के लिए कोशिश कर रहा हूँ, लेकिन उस प्रश्न का स्पर्शरेखा है)
let gitexecute (logger:string->unit) cmd =
let procStartInfo = new ProcessStartInfo(@"C:\Program Files\Git\bin\git.exe", cmd)
// Redirect to the Process.StandardOutput StreamReader.
procStartInfo.RedirectStandardOutput <- true
procStartInfo.UseShellExecute <- false;
// Do not create the black window.
procStartInfo.CreateNoWindow <- true;
// Create a process, assign its ProcessStartInfo and start it
let proc = new Process();
proc.StartInfo <- procStartInfo;
proc.Start() |> ignore
// Get the output into a string
while not proc.StandardOutput.EndOfStream do
proc.StandardOutput.ReadLine() |> logger
क्या मुझे समझ नहीं आता कैसे proc.Start() एक बूलियन लौट सकते हैं और यह भी कर सकते हैं प्रगतिशील रूप से आउटपुट प्राप्त करने के लिए मेरे लिए पर्याप्त असीमित हो।
दुर्भाग्य से, मैं वर्तमान में एक बड़ा पर्याप्त भंडार नहीं है - या पर्याप्त मशीन धीमी हो, बताने के लिए क्या आदेश बातों में हो रही हैं सक्षम होने के लिए ...
अद्यतन
मैंने कोशिश ब्रायन की सुझाव, और यह काम करता है।
मेरा प्रश्न थोड़ा अस्पष्ट था। मेरी गलतफहमी यह थी कि मैंने माना कि प्रक्रिया। स्टार्ट() ने पूरी तरह से प्रक्रिया की सफलता पूरी की, न केवल 'स्टार्ट' की, और इस प्रकार मैं नहीं देख सका कि यह काम कैसे कर सकता है।
मुझे इस तरह के कार्य के लिए असिंक्रोनस वर्कफ़्लो का उपयोग करके कुछ सफलता मिली: http://stackoverflow.com/questions/2649161/need-help-regarding-async-and-fsi – Stringer
मुझे वास्तव में यह सुनिश्चित नहीं है कि सवाल क्या है यहाँ। क्या आपका कोड काम से ऊपर है या नहीं? समस्या क्या है? –
ऐसा लगता है कि आप tester.exe लिख सकते हैं, जो स्टडआउट और फ्लश करने के लिए कुछ पंक्तियां लिखता है, दो सेकंड प्रतीक्षा करता है, और दो पंक्तियां लिखता है ... और इसका उपयोग यह जांचने के लिए करें कि यह कोड आपके जैसा व्यवहार करता है या नहीं? – Brian