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

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

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

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

5569閲覧

複数の.pyファイルを連動させたい

bonboniso

総合スコア7

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2018/06/14 05:56

前提・実現したいこと

pythonを独学で勉強しています。
その他言語についてもほぼ無知でプログラミングに関して完全なド素人です。

現状やりたいこととしては、
・「main.py」「sub.py」の2つのファイルを作成
・「sub」は「main」のモジュールとしてインポートする
(バックグラウンドで「sub」を待機させておくイメージです)
・「main」で特定の操作をすると、「sub」が走り出す
・「sub」の動作が完了すると、またバックグラウンドで待機
このような感じです。

まず、このようなことができるのでしょうか。
可能な場合「main」から「sub」へはどのように指示を出せば良いでしょうか。
また、「main」から「sub」へデータ(値)を受け渡したりすることは可能でしょうか。

このあたりの方法が全くわからず、調べても理解ができません。
方法とどのようなコードを書けばを知りたく、質問いたしました。

具体的には、

1.「main.py」にてウェブカメラを起動し、表示
同時に「sub.py」を起動し、バックグラウンドで待機させる
2.特定のコマにてボタンを押すとキャプチャをjpgで特定のフォルダに保存
その際、ファイル名に日付・時刻などをつける
3.項2を実行したと同時に、「sub.py」を実行(このトリガーの与え方がわかりません)
4.「sub.py」では項2で保存されたjpgファイルを開き、加工して保存したい
この際にjpgファイルを開くため、項2で指定したファイル名を取得する必要がある
(このファイル名の取得方法がわかりません)
5.「sub.py」での加工が終えたら再びバックグラウンドで待機

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

該当のソースコード

Python

1「main.py」 2 3import cv2, sub, datetime 4 5cam_win = "capture" 6date_name = "" 7 8capture = cv2.VideoCapture(0) 9while(True): 10 date = datetime.datetime.now() 11 global date_name 12 date_name = "{0:%Y%m%d%H%M%S}_".format(date) 13 14 ret, img = capture.read() 15 16 if(ret == False): 17 print("capture failed.") 18 break 19 20 cv2.imshow(cam_win, img) 21 22 save_key = cv2.waitKey(1) 23 if save_key == ord("s"): 24 cv2.imwrite(date_name + "img.jpg", img) 25 print("save complete.") 26 continue 27 #ここで「sub.py」を走らせるシグナルを送りたい 28 #また、ファイル名を一緒に転送したい 29 30 key = cv2.waitKey(1) 31 if(key == 27): 32 print("close.") 33 break 34 35capture.release() 36cv2.destroyAllWindows() 37 38~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 39 40「sub.py」 41 42from threading import (Event, Thread) 43import cv2, datetime 44 45event = Event() 46 47def img_edit(): 48 49 while(True): 50 event.wait() 51 edit_img = cv2.imread("~.jpg", 1) #ここで「main.py」から転送されたファイル名を指定したい 52 cv2.imwrite("edit_img.jpg", edit_img) 53  #本来は画像加工をしたいのですが、説明を簡略化するためリネームのみとしています 54 55th = Thread(target=img_edit) 56th.start() 57#ここで「main.py」からのシグナルを受けてimg_edit関数を走らせるトリガーを入れる? 58event.set() 59 60自分で調べて考えたところ、上記のような内容となります。 61threadingやevent部分は理解が進まず、ネットで知った情報をコピペしている状態です。 62お手数をおかけしますがご教示のほどよろしくお願いいたします。 63

試したこと

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

利用環境は

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

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

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

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

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

guest

回答1

0

ベストアンサー

まず、やりたいことから察しますに、sub.pyをバックグラウンドで待機させる必要を感じません。
「#ここで「sub.py」を走らせるシグナルを送りたい」の箇所で普通に画像加工を行ってやれば良いのではないでしょうか。

関数の組み立てはなるべくシンプルに考えるべきです。

投稿2018/06/14 06:10

kazto

総合スコア7196

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

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

bonboniso

2018/06/14 06:14

ご回答ありがとうございます。 仰られる通り、今回の質問のパターンですと一つのファイルで行うべきと思っておりますが、後学のためにこちらの方法を知りたく、質問いたしました。よろしくお願いいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問