2015-07-18 3 views
4

Код:AttributeError: 'ул' объект не имеет атрибута 'fileno'

import subprocess 

def printit(): 
    for i in range(6): 
     for j in range(6): 
      query = "select rxpkts, txpkts from ./log.csv where datapath = "+str(i)+" and port = "+str(j) 
      fileName = str(i)+"_"+str(j)+".csv" 
      with open(fileName, "w+"): 
       p = subprocess.Popen(["python", "q", "-H", "-d", ",", query], stdout=fileName) 

printit() 

Ошибка:

$ python processLog.py 
Traceback (most recent call last): 
    File "processLog.py", line 11, in <module> 
    printit() 
    File "processLog.py", line 9, in printit 
    p = subprocess.Popen(["python", "q", "-H", "-d", ",", query], stdout=fileName) 
    File "/usr/lib/python2.7/subprocess.py", line 702, in __init__ 
    errread, errwrite), to_close = self._get_handles(stdin, stdout, stderr) 
    File "/usr/lib/python2.7/subprocess.py", line 1128, in _get_handles 
    c2pwrite = stdout.fileno() 
AttributeError: 'str' object has no attribute 'fileno' 

Что может быть проблема? Я использую q

+0

Обратите внимание, что StringIO, в то время как надлежащего подкласса, не будет работать. Дополнительную информацию см. В http://stackoverflow.com/questions/5903501/attributeerror-stringio-instance-has-no-attribute-fileno. –

ответ

11

Аргумент stdout требует файлового объекта, а не строки для имени файла.

Попробуйте использовать -

import subprocess 

def printit(): 
    for i in range(6): 
     for j in range(6): 
      query = "select rxpkts, txpkts from ./log.csv where datapath = "+str(i)+" and port = "+str(j) 
      fileName = str(i)+"_"+str(j)+".csv" 
      with open(fileName, "w+") as f: 
       p = subprocess.Popen(["python", "q", "-H", "-d", ",", query], stdout=f) 

printit() 
Смежные вопросы