2017-04-16 65 views
0

我试图执行下面的代码,但它没有运行。错误日志粘贴在下面。此问题可能是由于导入PG引起的,但我不知道如何解决此问题。我该如何解决这个python错误? self.stdin.write(输入)TypeError:写入()参数必须是str,而不是字节

import pandas as pd 
from sqlalchemy import create_engine, MetaData, Table, select, engine 
from sqlalchemy.orm import sessionmaker 
import datetime 
import cx_Oracle 
import dateutil.relativedelta 
import configparser 
import sys, os 
from boto3.s3.transfer import S3Transfer 
import boto3 
import pg 

try: 
    options = 'keepalives=1 keepalives_idle=200 keepalives_interval=200 keepalives_count=5' 
    connection_string = "host=%s port=%s dbname=%s user=%s password=%s %s" % (
     'somehost', '8192', 'somedb', 'someuser', 'somepassword', options) 
    print(connection_string) 
    con = pg.connect(dbname=connection_string) 
    print('Connected to Redshift.Connection Detail : %s' % con) 

except Exception as e: 
    print('Unable to Connect to Redshift') 
    print(e.message) 
    print('No') 
    sys.exit(1) 



C:\Users\olaa\Desktop\CWB> python .\my.py Traceback (most recent call last): File ".\my.py", line 11, in <module> 
    import pg File "C:\Users\olaa\AppData\Local\Programs\Python\Python36\lib\site-packages\pg\__init__.py", line 1, in <module> 
    from .core import ( File "C:\Users\olaa\AppData\Local\Programs\Python\Python36\lib\site-packages\pg\core.py", line 6, in <module> 
    from . import glfw File "C:\Users\olaa\AppData\Local\Programs\Python\Python36\lib\site-packages\pg\glfw.py", line 138, in <module> 
    ['', '/usr/lib', '/usr/local/lib', 'C:/Users/olaa/AppData/Local/Programs/Python/Python36/Lib/site-packages/pg/'], 
_g lfw_get_version) File "C:\Users\olaa\AppData\Local\Programs\Python\Python36\lib\site-packages\pg\glfw.py", line 74, in _load_library 
    version = version_check_callback(filename) File "C:\Users\olaa\AppData\Local\Programs\Python\Python36\lib\site-packages\pg\glfw.py", line 130, in _glfw_get_versi on 
    out = process.communicate(_to_char_p(filename))[0] File "C:\Users\olaa\AppData\Local\Programs\Python\Python36\lib\subprocess.py", line 836, in communicate 
    stdout, stderr = self._communicate(input, endtime, timeout) File "C:\Users\olaa\AppData\Local\Programs\Python\Python36\lib\subprocess.py", line 1076, in _communicate 
    self._stdin_write(input) File "C:\Users\olaa\AppData\Local\Programs\Python\Python36\lib\subprocess.py", line 776, in _stdin_write 
    self.stdin.write(input) TypeError: write() argument must be str, not bytes 

Traceback (most recent call last): 
    File "<string>", line 28, in <module> 
EOFError: EOF when reading a line 
+0

你的代码简单地在'import pg'失败。该模块从哪里来? –

+0

我使用PIP安装它 PS C:\ Users \ olaa \ Desktop \ CWB> pip install pg 要求已经满足:p:在c:\ users \ olaa \ appdata \ local \ programs \ python \ python36 \ lib \ site -package 要求已满足:在c:\ users \ olaa \ appdata \ local \ programs \ python \ python36 \ lib \ site-packages中的枕头 要求已满足:PyOpenGL在c:\ users \ olaa \ appdata \ local \ programs \ python \ python36 \ lib \ site-packages(从 pg) 要求已经满足:olefile在c:\ users \ olaa \ appdata \ local \ programs \ python \ python36 \ lib \ site-packages(来自P illow-> pg) –

回答

1
import pg 

这不是一个Postgres库。这是一个OpenGL graphics library

即使是进口的工作,它会失败在con = pg.connect( ...

你试图连接到红移/ Postgres的,所以尽量实际的Postgres客户之一

In general, Python users want to use psycopg2 unless they have a strong reason to try another driver

https://wiki.postgresql.org/wiki/Python

+0

谢谢。这对我有效。但是,我仍然想知道为什么python通过提供错误消息而感到困惑 - “self.stdin.write(input)TypeError:write()参数必须是str,而不是字节” –

+0

因为Python 3中的库损坏了? –

相关问题