3

I have to launch a python sql file. The file is for mysql. I tried it like this:

from subprocess import Popen, PIPE
import sys


class ImportSql:
    def execImport(self, fileSql):
        try:
            with open(fileSql, 'r') as fileInput:
                proc = Popen(["mysql", "DB_NAME", "-u", "USER", "-pPASSWORD"], stdin=PIPE, stdout=PIPE)
                proc.communicate('source ' + fileInput)[0]
        except BaseException as ex:
            print("ERROR:", ex)
            sys.exit()

But I get this error:

ERROR: must be str, not _io.TextIOWrapper

how can I do?

matteo
  • 2,121
  • 4
  • 20
  • 33
  • This one looks like what you want. http://stackoverflow.com/a/4563950/1394353 note what the source is using - the file name, not contents. So dont open the file – JL Peyret May 09 '17 at 15:07

2 Answers2

2

You need to pass the contents of the file, not the file object.

proc.communicate('source ' + fileInput.read())

Also, please don't catch exceptions just to print them and exit. That's what Python does already. Leave out that try/except.

Daniel Roseman
  • 588,541
  • 66
  • 880
  • 895
0

Ok, I moved the mysql instructions inside a bat.

from subprocess import Popen


class ImportSql:
    def execImport(self):
        p = Popen("import.bat")
        p.communicate()

it's ok! thanks!

matteo
  • 2,121
  • 4
  • 20
  • 33