2015-06-23 39 views
0
閱讀
import subprocess 
import tempfile 

fd = tempfile.NamedTemporaryFile() 
print(fd) 
print(fd.name) 
p = subprocess.Popen("date", stdout=fd).communicate() 
print(p[0]) 
fd.close() 

這將返回:使用NamedTemporaryFile從標準輸出通過子在Linux上

<open file '<fdopen>', mode 'w' at 0x7fc27eb1e810> 
/tmp/tmp8kX9C1 
None 

相反,我想它會返回類似:

Tue Jun 23 10:23:15 CEST 2015 

我嘗試添加mode="w",如以及delete=False,但無法成功使其工作。

+0

你知道'subprocess.check_output()'? – jfs

+0

@ J.F.Sebastian是的。實際上,我希望傳遞給系統的命令是'qstat -xml -r'(http://stackoverflow.com/a/26104540/597069)。不幸的是,它似乎與「日期」不同。 – tflutre

+0

如果你需要輸出'qstat';你應該問一下'qstat'。看起來像[XY問題](http://meta.stackexchange.com/a/66378/137096)。你爲什麼在這裏需要'NamedTemporaryFile'? – jfs

回答

0

除非stdout=PIPE; p[0]將在您的代碼中始終爲None

要獲得一個命令字符串的輸出,你可以使用check_output()

#!/usr/bin/env python 
from subprocess import check_output 

result = check_output("date") 

check_output() uses stdout=PIPE and .communicate() internally

來讀取一個文件輸出,你應該在文件對象調用.read()

#!/usr/bin/env python 
import subprocess 
import tempfile 

with tempfile.TemporaryFile() as file: 
    subprocess.check_call("date", stdout=file) 
    file.seek(0) # sync. with disk 
    result = file.read() 
相關問題