2014-06-06 51 views
1

因此我知道如何執行python腳本並使用os.command或甚至子進程在命令窗口中輸出它。另外我知道捕獲輸出到一個文本文件是通過os.command('我的命令> me.txt「完成的。打印python腳本輸出到文本文件和命令窗口

我的問題是: 有一種方法可以用一個命令來完成它們兩個嗎?執行python腳本,將輸出捕獲到文本文件並將其顯示在命令窗口上?

如果這是不可能的,這裏是另一個問題: 我想執行的命令最多需要8分鐘才能完成,在文本文件中最多可以寫入300行我可以在命令執行期間訪問文本文件,以便在不等待命令完成執行的情況下獲取一些數據,例如每隔1分鐘訪問一次文本文件?

如果兩者都不可行,那麼這也可以完成這項工作: 當我的命令成功執行時,它會在cmd以及其他許多行上打印出Done語句。我可以檢查cmd是否打印了「完成」字符串,或者需要在文本文件中捕獲這個字符串以便發生?

+0

你說的是打印子的結果既是一個文件,標準輸出還是你指的是從Python文件本身的所有輸出?這是兩個完全不同的問題。重定向所有python執行輸出檢查這個帖子:http://stackoverflow.com/questions/14906764/how-to-redirect-stdout-to-file-and-console-with-scripting – Bob

+0

你試過這個'./ script.py> output.txt |輸入output.txt'? – Pavel

+0

Bob,我正在討論將子進程的結果打印到文件和stdout中,而不是python文件 –

回答

0

如果你可以在你的腳本內而不是從命令行執行此操作,那將非常簡單。

with open("output.txt", "w") as output: 
    print>>output, "what you want as output" #prints to output file 
    print "what you want as output" #prints to screen 
+0

好友腳本在cmd中啓動,但在幾秒鐘後崩潰+它不會在txt中打印任何內容文件。所以,當im打印出一行或兩行如你的例子時,它會很好地工作,但是當im在兩個IIN中執行一個命令時,它會崩潰。 –

0

我設計的更簡單的方法是創建一個打印到屏幕和文件的功能。下面的示例工作,當你輸入輸出文件名作爲參數:

OutputFile= args.Output_File 
if args.Output_File: 
    OF = open(OutputFile, 'w') 

def printing(text): 
    print text 
    if args.Output_File: 
     OF.write(text + "\n") 

#To print a line_of_text both to screen and file all you need to do is: 
printing(line_of_text) 
0

最簡單的方法來保存一個命令的輸出,同時也呼應到stdout是使用tee

$ python script.py | tee logfile.log 

如果要遵循一個文件的輸出,而它被寫入使用tail

$ tail -f logfile 

你可能要unbufferflush輸出立即能夠全線之前讀取輸出或緩衝區填滿了起來:

$ unbuffer python script.py > logfile 
$ tail -f logfile 

print ("to file..", flush = True)