2013-04-22 86 views
2

我有一個讀取文本文件的應用程序。將輸入傳遞給未從標準輸入讀取的應用程序

如果應用程序從標準輸入讀取它,然後我可以轉發輸入/管它

$ app < input.txt 
$ cat input.txt | app 

不幸的是,應用程序需要一個文件名作爲參數..

$ app --input input.txt 

可以和我不容易改變輸入源(例如,對於wget的結果,交換本地文件[例如])。

有沒有一個選擇來欺騙這個程序?

如果解決方案需要一個臨時文件,它是必要的,這個文件是不是留在FS ..

的應用實際上是一個可執行的JAR;我想要在Win/Lin上運行這個技巧..

回答

3

我不知道這是否會爲你工作,但我已經解決了類似的問題FIFO。 http://linux.die.net/man/3/mkfifo

這可能會給你的應用程序和源代碼之間的間接性。

mkfifo fifo.input 
app --input fifo.input 

現在你可以用不同的來源填充管道。

cat input > fifo.input 
ctrl-c 
cat otherInput > fifo.unput 

希望它能解決您在Linux上的問題。到目前爲止,我知道它在Windows上不存在。

+0

這是非常好的!在通過應用程序閱讀後,'fifo.input'會消失嗎? – 2013-04-23 05:38:29

+0

不,但它佔用0個空間,內核將輸出直接重定向到進程,不使用磁盤空間。磁盤上的名稱只是一個入口點。 – mki 2013-04-23 06:44:46

+0

這是非常好的,如果你能找到一種方法來自動處理在這個操作過程中創建的任何東西(甚至是高清條目),我可以馬上接受。 – 2013-04-23 06:48:57

0

你想要做這樣的事情。

java -jar myjar.jar arg1 arg2 

其中myjar.jar是可執行jar和arg1 arg2等是程序需要的參數。

因此,假設你想通過input.txt您的應用程序及其only commandline parameter required然後命令將被

java -jar myjar.jar input.txt 
+3

這是從stdin中讀取的!這並不回答OP的問題。 – 2013-04-22 17:02:38

+0

OP的想要「改變輸入源」,而不用默認名稱創建文件。如果應用程序使用sdin作爲輸入,那麼他已經將解決​​方案想象爲輸入或輸入。但是當他提到它是一個可執行的jar時,他正在尋找輸入而不創建額外/臨時文件。 – 2013-04-22 17:20:59

+0

假設我不想傳遞一個現有的文件('input.txt'),但是一個在線資源(如網頁的html) – 2013-04-22 17:35:57