質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Blender

Blenderとは、オープンソースの3DCGソフトウェアです。フリーでありながら、3Dモデル作成、レンダリング、アニメーション、コンポジットなどのハイエンドに匹敵する高い機能を持ち、さらにゲームエンジンも搭載しています。

Q&A

0回答

657閲覧

socket通信でのエラーなのかそうでないのか教えてください

fa_______Xx

総合スコア4

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Blender

Blenderとは、オープンソースの3DCGソフトウェアです。フリーでありながら、3Dモデル作成、レンダリング、アニメーション、コンポジットなどのハイエンドに匹敵する高い機能を持ち、さらにゲームエンジンも搭載しています。

0グッド

0クリップ

投稿2020/01/07 07:11

編集2020/01/07 07:34

前提・実現したいこと

コマンドラインから直接blenderを起動し,
その際にオプションとしてpythonスクリプトを指定して
起動と同時にそのpythonスクリプトが実行される実験を行いたかったのですが、blenderの起動後、処理待ちから進展しません。
server.pyはスタンドアロンで動作するサーバで
s_client.pyがblenderに実行させるスクリプトです。

s_client.pyでは,上のほうで,
呼び出される関数run_10_times()を定義しています.
この中で,サーバ(localhostの8823番ポート)にアクセスし,
応答が帰ってきたら立方体を描画するblender専用のbpyコードを実行し,
その後,応答がendであれば終了(Noneをreturn),
そうでなければ10秒待ち(3をreturn)しています.
一番下で,この関数を定期的に呼び出す設定をしています

発生している問題・エラーメッセージ

blenderの起動後、処理待ちから進展しません。
(*bpy. はblender専用コードです)
`

s_client.py

python

1# -*- coding:utf-8 -*- 2import socket 3import errno 4import requests 5from socket import error as socket_error 6 7import bpy 8from random import randint 9 10counter = 0 11 12def run_10_times(): 13 host = "localhost" #お使いのサーバーのホスト名を入れます 14 port = 8823 #適当なPORTを指定してあげます 15 16 client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #オブジェクトの作成をします 17 18 try: 19 client.connect((host, port)) #これでサーバーに接続します 20 except socket_error as serr: 21 print('cannot connect') 22 return None 23 24 massage = "hello" 25 26 client.send(massage.encode('utf-8')) 27 28 response = client.recv(4096) 29 30 print(response) 31 client.close() 32 33 34 number = 1 35 for i in range(0,number): 36 x = randint(-30,30) 37 y = randint(-30,30) 38 z = randint(-30,30) 39 bpy.ops.mesh.primitive_cube_add(location=(x,y,z)) 40 41 global counter 42 counter += 1 43 print(counter) 44 if b'end' in response: 45 print('finished') 46 return None 47 return 3.0 48 49bpy.app.timers.register(run_10_times) 50

server.py

python

1# -*- coding:utf-8 -*- 2import socket 3 4host = "127.0.0.1" #お使いのサーバーのホスト名を入れます 5port = 8823 #クライアントで設定したPORTと同じもの指定してあげます 6 7serversock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 8serversock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) 9serversock.bind((host,port)) #IPとPORTを指定してバインドします 10serversock.listen(10) #接続の待ち受けをします(キューの最大数を指定) 11 12while True: 13 14 print('Waiting for connections...') 15 clientsock, client_address = serversock.accept() #接続されればデータを格納 16 17 rcvmsg = clientsock.recv(1024) 18 print('Received -> %s' % (rcvmsg)) 19 if rcvmsg == '': 20 break 21 print('Typa message...') 22 s_msg = input().replace('b', '').encode('utf-8') 23 if s_msg == '': 24 break 25 26 clientsock.sendall(s_msg) #メッセージを返します 27 clientsock.close() 28

試したこと

初めはpcのスペックの問題かと思い、表示するオブジェクトをもっとも簡単なcubeに変更しましたが、いくら待っても blenderの起動後、処理待ちになってしまいました。

追記 cubeの表示はできていました(2020年1月7日16:32)

補足情報(FW/ツールのバージョンなど)

python ver2.8

使用中のpc MacBook Pro (13-inch, 2019, Two Thunderbolt 3 ports)
プロセッサ 1.7 GHz Intel Core i7
メモリ 16 GB 2133 MHz LPDDR3
グラフィックス Intel Iris Plus Graphics 645 1536 MB

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問