2015-01-07 60 views
-2

我想使用Python將Linux的free命令的輸出寫入文件。在Python中使用Linux重定向到文件命令

我曾嘗試以下,但它並沒有幫助:

from subprocess import call 
    call(["free",">","myfile"]) 

    f = open('myfile','w') 
    f.write(subprocess.call(["free"])) 

我是新來的Python這樣可以有人指導我這裏寫的free命令輸出使用Python文件?

此外,我使用的Python是2.4。

我在使用Python 2.4

+5

爲什麼你在使用新用戶時使用這種古老的Python版本。無論如何,如果你確定需要Python 2.x,你應該使用2.7,而你應該學習Python 3.x。 –

+0

我猜的原因是CentOS 5 :-) – Carpetsmoker

+1

@Carpetsmoker你肯定會從EPEL存儲庫中安裝Python 2.6。 – moooeeeep

回答

0

這是python2.7

f.write(str(call(["free", ">", "myfile"]))) 

通過這個你可以在myfile寫命令的輸出的公司工作。

from subprocess import call 
f = open('myfile','w+')  # if you willing to read it simultaneously 
f.write(str(call(["free", ">", "myfile"]))) # convert the data coming from shell to string using `str()` function. 

f.seek(0) # Reading from start set pointer to start of the file. 
print f.read() 
+0

如果您自己編寫文件,則不應在命令中包含重定向。現在只是一個語法錯誤。 – tripleee

1
import subprocess 

f = open('myfile', 'w') 
subprocess.call('free', stdout=f) 
f.close() 

在Python的新版本中,應當使用with關閉文件,並check_callfree命令捕獲錯誤。但是你說你被Python 2.4困住了,所以你去了!

+0

我得到以下錯誤。這與Python 2.4的工作?我無法升級到最新的python版本,因爲我的公司使用this.Traceback(最近呼叫最後): 文件「memcheck。py「,第5行,在 f.write(subprocess.check_output('free')) AttributeError:'模塊'對象沒有屬性'check_output' – Ram

+0

@ user2990927:好的,更新,所以它希望能與你的古代Python。可能是新工作的時間:) –

0

您應該爲此使用subprocess.Popen

例子:

import subprocess 

cmd = "date" 
fname = "output" 

with open(fname, 'w+') as outf: 
    subprocess.Popen(cmd, stdout=outf) 

沒有文件訪問與-聲明:

outf = open(fname, 'w+') 
try: 
    subprocess.Popen(cmd, stdout=outf) 
finally: 
    outf.close() 

是的,你應該更新您的Python版本。

參考:

也請看看關於使用細節和例子不同的常見使用情況的文檔的這些部分:

相關問題