編集してフォーマット:
これは元のコードです
from __future__ import print_function
import socket
import sys
def socket_accept():
conn, address = s.accept()
print("Connection has been established | " + "IP " + address[0] + "| Port " + str(address[1]))
send_commands(conn)
conn.close()
def send_commands(conn):
while True:
cmd = raw_input()
if cmd == 'quit':
conn.close()
s.close()
sys.exit()
if len(str.encode(cmd)) > 0:
conn.send(str.encode(cmd))
client_response = str(conn.recv(1024), "utf-8")
print(client_response, end ="")
def main():
socket_accept()
main()
「client_response」変数でこのエラー「TypeError:str()は最大で1つの引数(与えられた2)を受け取ります」を受け取ります
ここにエラーがあります:
client_response = str(conn.recv(1024), "utf-8")
それを次のように変更してください:
client_response = str(conn.recv(1024)).encode("utf-8")
最後から2行目では、2つの引数をstr
関数に渡しますが、str
関数はPython 2。実際にはpython 3で最大3つの引数を取ります
https://docs.python.org/2.7/library/functions.html?highlight=str#strhttps://docs.python.org/3.6/library/functions。 html?highlight = str#str
したがって、python 3のコードをpython 2インタープリタで3つコードを誤って実行するか、間違った言語のドキュメントを参照しています。
したがって、python 2を使用している場合は@franciscosolimasの回答を使用するか、python 3を使用していることを確認してください。後者の場合は、キーワード引数を追加して、将来何が起きているかを確実に把握する
client_response = str(conn.recv(1024), encoding="utf-8")
私は同様のエラーを受け取りましたが、ここでは(操作として)同じではない可能性がありますが、エラーの検索からここにたどり着いたため、それは十分に簡単な修正であり、共有したかったです。
Traceback (most recent call last):
File "queries.py", line 50, in <module>
"WHERE ao.type='u';")
TypeError: str() takes at most 3 arguments (5 given)`
python3
で私のために修正されたのは、,
を+
に変換することでした。
str("SELECT s.name + '.' + ao.name, s.name"
"FROM sys.all_objects ao",
"INNER JOIN sys.schemas s",
"ON s.schema_id = ao.schema_id",
"WHERE ao.type='u';"))
str("SELECT s.name + '.' + ao.name, s.name " +
"FROM sys.all_objects ao " +
"INNER JOIN sys.schemas s " +
"ON s.schema_id = ao.schema_id " +
"WHERE ao.type='u';")
passed
クエリが機能するように、自分のスペースを追加する必要がありました。コンマがPythonでそれをやっていたので...
考えと私の経験に基づく推測:私の場合、bash/pythonでリテラルを評価しようとして追いついたようですu'
私の知る限り、u
と呼ばれるコマンドがないか、python u'
でunicode
不完全な文字列。いずれかの方法で壊れて、私の修正を共有したかった。
乾杯!
〜JayRizzo