呃呃呃,遇到了一個非常噁心得問題,現在就是,有幾十萬條資料需要當作引數呼叫python指令碼
一次一次輸入命令過去緩慢,經過了多層考慮決定使用程式來解決(不知道執行緒怎麼開啟bash得)
原理非常簡單,類似與開啟一個cmd視窗不斷地往cmd視窗內寫入命令
引數如下:
bashCount:開啟程式個數,也就是啟動bash數量
command:命令
public static void CreateBash(int bashCount, List<string> command) { try { var data = Convert.ToInt32(Math.Ceiling((double)command.Count / bashCount)); Parallel.For(0, bashCount, (i) => { Process p = new Process(); //設定要啟動的應用程式 p.StartInfo.FileName = "bash"; //是否使用作業系統shell啟動 p.StartInfo.UseShellExecute = false; // 接受來自呼叫程式的輸入資訊 p.StartInfo.RedirectStandardInput = true; //輸出資訊 p.StartInfo.RedirectStandardOutput = true; // 輸出錯誤 p.StartInfo.RedirectStandardError = true; //不顯示程式視窗 p.StartInfo.CreateNoWindow = true; //啟動程式 p.Start(); var test = command.Skip(i * data).Take(data).ToArray(); var count = 0; var commandStr = ""; var commandCount = Convert.ToInt32(Math.Ceiling((double)test.Count() / 10)); if (test.Count() > 0) { foreach (var item in test) { count++; var filePath = item.Split(".").FirstOrDefault();
//執行命令 var demo= $"{Environment.CurrentDirectory.ToString()}/ScriptFile/ProAnalysis {item} {filePath}.pa 0"; var demo1 = $"{Environment.CurrentDirectory.ToString()}/ScriptFile/pcap2featuresjson {item} {filePath}.json {filePath}.bin {filePath}.hex"; commandStr += demo + ";" + demo1; commandStr += ";"; if (count >= 100) { p.StandardInput.WriteLine(commandStr); count = 0; commandStr = ""; } } } p.StandardInput.WriteLine("exit"); p.StandardInput.AutoFlush = true; string strOuput = p.StandardOutput.ReadToEnd(); p.WaitForExit(); p.Close(); }); } catch (Exception e) { Console.WriteLine("失敗" + e.Message); } }
可以直接複用
詳細講解一下方法:Parallel.For讓多個bash並行執行,並且每個取出相等的命令,往bash寫入