2011-08-23 65 views
0

我有一個TF2服務器,如果被TF2我不在的時候更新,服務器將輸出:讀程序輸出C++

你的服務器是過時的。請更新並重新啓動。

我怎樣才能用C++觀察/讀取輸出?

的理念是:

  1. if (output == "Your server is out of date. Please update and restart.") 
     2. kill the application 
     3. run update.bat 
     4. start observing again 

是我的想法可能嗎?

this is how server window looks like, just imagine that the last line says: "Your server is out of date. Please update and restart."

+3

這是否必須用C++來完成?這看起來像是使用shell /批處理腳本可以更容易完成的事情。我建議在服務器啓動時將服務器輸出重定向到某個文件,然後編寫一個腳本讀取該文件並查找更新消息,然後刪除該文件,運行update.bat,並在發現服務器時重新啓動服務器更新消息。如果你願意的話,你當然可以用C++做類似的事情。 – aroth

+0

你真的需要殺死服務器嗎?你不能只在服務器中運行update.bat並繼續觀察嗎? – StevieG

+0

一個shell腳本聽起來就像是一個不那麼痛苦的方式來處理這個問題,尤其是因爲它允許你輕鬆地捕獲正在運行的進程的PID,並且可以立即訪問諸如「kill」之類的進程信號工具。 –

回答

1

這基本上是一個看門狗

一個解決方案可以使用管道來完成:

管服務器輸出從C++應用標準輸入(與CIN將做讀它)。例如,如果您的TF2服務器tf2.exe和你的C++應用程序是cpp.exe:

tf2.exe | cpp.exe 

您將需要再次執行這個命令,每次你重新啓動服務器(這涉及到退出後的C++應用程序這樣做,因爲它將由命令重新運行)。

+0

我該怎麼做?我找不到一個簡單的解釋。 Thx – Hami

+0

我不知道還有什麼需要進一步解釋的。 'string input =「」; (輸入!=「您的服務器已過期,請更新並重新啓動。」) { cin >> input; } run_batch(); exit();' 順便說一句,正如有人說,C++是一個不錯的選擇。腳本可以做得更好(我推薦Bash或Perl)。 – m0skit0