看板 java 關於我們 聯絡資訊
如標題所問, 小弟有個"別人"寫好的程式碼, 執行它的時候, 它會自動叫起一個cmd來顯示執行過程及結果, 但因為cmd如果輸出太多的話, 前面的資訊就會被"吃"掉(或者說看不見), 所以想問說有沒有Java可以在這個cmd執行的時候, 可以把文字也轉存成txt呢? 或是有其他軟體做的到呢? 謝謝各位高手的賜教! -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.170.164.180 ※ 文章網址: https://www.ptt.cc/bbs/java/M.1467263547.A.315.html
omidofor: class Process 操作standard input 06/30 13:18
weakstudy: 可是那個自動叫起的cmd並不能下任何指令, 06/30 13:37
weakstudy: 這樣的話,要怎麼運用您的方法來操作呢?請賜教! 06/30 13:38
weakstudy: 也不能用cmd重新導向的方法 06/30 13:39
omidofor: 你的意思是你要對它下指令嗎?是的話用standard output 06/30 13:56
mars90226: 估狗Java pipe應該就有答案 06/30 14:06
weakstudy: 我的意思是…那個cmd視窗我完全不能控制… 06/30 14:08
weakstudy: 但是它會產生很多訊息,而訊息一多,前面的訊息就看 06/30 14:08
weakstudy: 不見,所以我想要把它的訊息"全部"存進文字檔, 06/30 14:09
weakstudy: 不知道做的到嗎? 06/30 14:09
cowbaying: 用log... 06/30 14:46
gameking: 你是要改別人寫好的程式碼還是要另外寫一個程式去做擷取 06/30 14:57
weakstudy: 另外寫一個程式去擷取 06/30 15:09
LaPass: 這樣喔.... 那就只能寫個鍵盤精靈之類的東西去擷取螢幕了 06/30 15:28
LaPass: 然後把螢幕上的字用影像識別去轉換成文字 06/30 15:29
LaPass: 或是你想辦法去修改那個自動跑起來的cmd,然後把輸出導到 06/30 15:29
LaPass: 純文字,如果是linux系統,就用 java xxxxxxx > log.txt 06/30 15:30
LaPass: 之類的。windows我不熟,但應該也有類似的方法 06/30 15:31
weakstudy: 就是因為那個cmd是它自已叫起來執行的,這才麻煩! 06/30 15:49
bitlife: 除非程式主動改導向,standard out file descriptor會繼承 06/30 20:47
bitlife: 所以在最上層的母程式做輸出導向,那個自動被叫的cmd的輸 06/30 20:48
bitlife: 出也會被導到最上層的輸出導向檔案去 06/30 20:48
weakstudy: 所以才想要用Java(或其他程式語言、軟體)擷取出cmd裡的 06/30 21:05
weakstudy: 文字 06/30 21:06
ripple0129: cmd可以調緩衝區大小 06/30 22:27
bitlife: 我和原po好像有點雞同鴨講.我這樣問,別人寫的程式(假設叫 06/30 22:47
bitlife: a.exe)最開始是怎麼被執行的? 06/30 22:47
bitlife: 假設a.exe是console程式,桌面有圖示,double click執行,就 06/30 22:49
bitlife: 產你描述的現象.如果我上面推測正確,你先開個cmd視窗,手 06/30 22:49
bitlife: 動執行 <path-to-a.exe>/a.exe > c:\out.txt 這樣就會達 06/30 22:50
bitlife: 成你希望把輸出轉到out.txt的目的了 06/30 22:50
bitlife:    <path-to-a.exe>\a,exe 06/30 22:51
weakstudy: 回答大大 … double click後執行的是先跳出一個視窗, 07/01 13:56
weakstudy: 然後才又叫出cmd視窗,一共是叫出兩個視窗, 07/01 13:56
weakstudy: 所以小弟才不知道該怎麼處理第二個跳出的cmd視窗! 07/01 13:57
omidofor: 我又看了幾次原文,還是無法理解你想表達的是上面的意思 07/01 14:33
weakstudy: = =" 對不起,總之就是有辦法把cmd視窗裡顯示的文字, 07/01 15:28
weakstudy: 自動讀取後,寫入文字檔嗎? 07/01 15:29
weakstudy: 但不能使用轉導向的方法,有高手有任何方法嗎? 07/01 15:29
pico2k: 在win32平台,可以用API Hook的方法取得文字,請自行google 07/01 18:14
pico2k: google "win32 console hook" 07/01 18:14
bitlife: 你有照我說的,先開cmd,再下指令去執行 a.exe (對應到你的 07/01 23:52
bitlife: 第一個double click的執行檔)? 07/01 23:52
bitlife: 如果希望視窗本身也留下顯示,在*nix系統一般是pipe給tee 07/01 23:53
bitlife: 再寫到檔案 07/01 23:53
bitlife: 找win32版的tee理論上可以 07/01 23:53
iFEELing: 貌似那個a.exe會自己再CALL一個CMD起來跑 這樣PIPE有效? 07/02 11:36
bitlife: 正常會有效,因為file descriptor會一直被child process 07/02 13:29
bitlife: 繼承,只要child也是console程式,理論上ok的 07/02 13:30
bitlife: 當然如果程式有處理把child process的file descriptor轉 07/02 13:31
bitlife: 向,那就沒效了.反正試看看不吃虧 07/02 13:31
bitlife: 剛想了一下,會跳出新視窗這點有可能是不行,這代表control 07/02 13:34
bitlife: terminal(*nix術語)換了,標準輸出入就和最上代不同了 07/02 13:34
PttTime: window也可以 > 2>&1 07/02 20:06
cha122977: 直接轉存: xxx >> log.txt 07/03 13:27
cha122977: 顯示同時轉存: xxx | tee log.txt 07/03 13:27
weakstudy: 謝謝各位高手給的提示,小弟會試試! 07/04 09:31
weakstudy: 又來發問 … 這些方法好像都不行 ~"~ 07/04 20:45