2013-04-19 3 views
13

मुझे लगता है कि प्रश्न के लिए वेब खोज की है और सर्वर दोष पर उतरा:क्या मैं विंडोज के तहत एक सक्रिय प्रक्रिया के एसटीडीआईएन को कुछ पाठ भेज सकता हूं?

Can I send some text to the STDIN of an active process running in a screen session?

लगता है जैसे कि यह लिनक्स के तहत इस लक्ष्य को हासिल करने के लिए हास्यास्पद आसान है। लेकिन मुझे Win32 कमांड प्रॉम्प्ट के लिए इसकी आवश्यकता है।

पृष्ठभूमि: मैं एक आवेदन है कि चुनाव STDIN और अगर मैं एक्स कुंजी दबाते हैं, आवेदन समाप्त हो जाता है की है। अब, मैं कुछ स्वचालित परीक्षण करना चाहता हूं, एप्लिकेशन का परीक्षण करूँगा और फिर इसे बंद कर दूंगा।

नोट: बस प्रक्रिया को मारना एक विकल्प नहीं है क्योंकि मैं वर्तमान में अपने आवेदन के बंद होने के दौरान उत्पन्न होने वाली समस्याओं की जांच कर रहा हूं।

+0

इस बैच फ़ाइल में करने के लिए मुश्किल हो सकता है, लेकिन यदि आप विंडोज पावरहेल का उपयोग कर रहे हैं, तो आप प्रोसेस ऑब्जेक्ट को तुरंत चालू कर सकते हैं, अपने एप्लिकेशन को चलाने के लिए इसे 'स्टार्ट' विधि कहते हैं और फिर प्रक्रिया की 'स्टैंडर्ड इनपुट' प्रॉपर्टी में टेक्स्ट इनपुट दें। – Abbas

+0

@Abbas: यदि आप इस पर (यानी कोड नमूना) पर थोड़ा और विस्तार कर सकते हैं, तो आप प्रतिनिधि कमाएंगे ... – eckes

उत्तर

14

.NET फ्रेमवर्क Process और ProcessStartInfo कक्षाओं का उपयोग प्रक्रिया को बनाने और नियंत्रित करने के लिए किया जा सकता है। चूंकि .NET ऑब्जेक्ट्स को तुरंत चालू करने के लिए Windows PowerShell का उपयोग किया जा सकता है, इसलिए प्रक्रिया के लगभग हर पहलू को नियंत्रित करने की क्षमता PowerShell के भीतर से उपलब्ध है।

करने का तरीका यहां एक cmd.exe प्रक्रिया को dir आदेश भेजने के लिए (एक .ps1 फ़ाइल में इस रैप करने के लिए सुनिश्चित कर लें और उसके बाद निष्पादित स्क्रिप्ट) कर सकते हैं:

$psi = New-Object System.Diagnostics.ProcessStartInfo; 
$psi.FileName = "cmd.exe"; #process file 
$psi.UseShellExecute = $false; #start the process from it's own executable file 
$psi.RedirectStandardInput = $true; #enable the process to read from standard input 

$p = [System.Diagnostics.Process]::Start($psi); 

Start-Sleep -s 2 #wait 2 seconds so that the process can be up and running 

$p.StandardInput.WriteLine("dir"); #StandardInput property of the Process is a .NET StreamWriter object 
संबंधित मुद्दे

 संबंधित मुद्दे