2015-11-14 61 views
0

NetBeans中使用Python並將文件arguments設置爲input/output有些麻煩。例如:Python:在NetBeans中傳遞文件作爲輸入

import re, sys 
for line in sys.stdin: 
    for token in re.split("\s+", line.strip()): 
     print(token) 

命令行用法python splitprog.py <input.txt> output.txt很好用。但是在NetBeans中,輸出窗口只是等待,即使給出一個文件名(測試了很多組合),也不會發生任何事情。

項目屬性中的Application Arguments行(其中一個可以爲Java項目輸入這些文件)似乎也沒有使用,因爲無論是否存在文件名/路徑,行爲都是相同的。是否有一些技巧可以使其發揮作用,或者在NetBeans中使用Python的文件參數目前無法使用?

ADD:按照建議通過@John Zwinck,一個例子溶液:

import re, sys 
with open(sys.argv[1]) as infile: 
    with open(sys.argv[2], "w") as outfile: 
     for line in infile: 
      for token in re.split("\s+", line.strip()): 
       print(token, file = outfile) 

參數文件是在NB項目屬性設置。在命令提示符下,程序現在僅由python splitprog.py input.txt output.txt運行。

回答

1

當你這樣做:

python splitprog.py <input.txt> output.txt 

您重定向到input.txtpythonstdinstdoutpythonoutput.txt。您根本沒有使用命令行參數到splitprog.py

NetBeans does not support this.

相反,你應該通過文件名作爲參數,就像這樣:

python splitprog.py input.txt output.txt 

然後在NetBeans你剛纔設置的命令行參數input.txt output.txt,也將努力同上述命令行在shell中。你需要稍微修改程序,也許是這樣的:

with open(sys.argv[1]) as infile: 
    for line in infile: 
     # ... 

如果你仍然想支持stdinstdout,一個慣例是使用-意味着這些標準流,所以你可以在你的程序代碼支持此:

python splitprog.py - - <input.txt> output.txt 

也就是說,你可以寫你的程序,瞭解-爲「從外殼使用標準流」,如果你需要支持做事的老辦法。或者,如果沒有給出命令行參數,就默認這種行爲。

+0

非常豐富,謝謝!我試圖根據您的解決方案編寫代碼,輸出有點意外。我編輯了原始問題;你會介意檢查代碼嗎? –

+1

@Россарх:你曾經使用'print',現在你正在使用'write',它不添加換行符。你可以做'print(token,file = outfile)'或'outfile.write(token +'\ n')'。 –

+0

完美的作品! –

相關問題