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

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

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

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

Q&A

解決済

1回答

1563閲覧

Pythonで別ファイルを実行後,別ファイルの処理によって別ファイルのみを終了させたい

zzzTKG

総合スコア7

Python

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

0グッド

2クリップ

投稿2020/05/06 08:51

Pythonで別ファイルを実行後,別ファイルのみ終了

A.pyとB.pyの二つのファイルがあるとします.
A.pyは無限ループでメール確認の処理を行っており,新しくメールを受け取ったらB.pyを実行するファイルです.
B.pyはディスコードのBotで,終了メッセージを受け取ったらawait client.close()後,quit()でプログラムを終了しています.この際,A.pyも終了してしまうのですが,A.pyの実行を継続させたままB.pyのみを終了させるにはどうすればいいでしょうか?
A.py = MailCall.py
ネット上からほぼそのまま頂戴しています.詳しく理解が及んでいない点があります.
B.py = TakagisanBot
自作です.アニメ「からかい上手の高木さん」をモチーフにしていますので口調に関してはお目汚し失礼いたします.

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

B.pyだけでなくA.pyも終了してしまう

該当のソースコード

Python

1#MailCall.py 2import time 3import httplib2, os 4import TakagisanBot 5from apiclient import discovery 6import gmail_auth # 先ほど作成したプログラム 7 8 # Gmailのサービスを取得 9def gmail_get_service(): 10 # ユーザー認証の取得 11 credentials = gmail_auth.gmail_user_auth() 12 http = credentials.authorize(httplib2.Http()) 13 # GmailのAPIを利用する 14 service = discovery.build('gmail', 'v1', http=http) 15 return service 16 17 # メッセージの一覧を取得 18def gmail_get_messages(): 19 service = gmail_get_service() 20 # メッセージの一覧を取得 21 messages = service.users().messages() 22 msg_list = messages.list(userId='me', maxResults=10).execute() 23 24 # 取得したメッセージの一覧を表示 25 for msg in msg_list['messages']: 26 topid = msg['id'] 27 msg = messages.get(userId='me', id=topid).execute() 28 if msg['labelIds'][0] == 'UNREAD': 29 TakagisanBot 30 31 # メッセージの取得を実行 32while True: 33 gmail_get_messages() 34 time.sleep(10)

python

1#TakagisanBot.py 2import discord 3import random 4import Dice 5import ResDice 6import re 7import jaconv 8import sys 9client = discord.Client() 10@client.event 11async def on_ready(): 12 print("準備おっけー!") 13 print(client.user.name) 14 print(client.user.id) 15 print("で入るよ~.") 16 17sidlist=[] 18 19@client.event 20async def on_message(message): 21 msg = message.content 22 if message.author != client.user: 23 if msg == 'おはよう' or \ 24 msg == 'おはよ' or \ 25 msg == 'おはよー' or \ 26 msg == 'おはよ~' or \ 27 msg == 'ハロー': 28 await message.channel.send(message.author.mention + " おはよ~") 29 elif msg == '今日のダイス運は?' or \ 30 msg == '今日のダイス運は?' or \ 31 msg == 'ダイス運' or \ 32 msg == '今日のダイス運' or \ 33 msg == 'ダイス運は?' or \ 34 msg == 'ダイス運は?': 35 luck = ["大吉!クリティカルが出るでしょう.",\ 36 "中吉!成功はするかも?","中吉!成功はするかも?",\ 37 "吉!そこそこだね.","吉!そこそこだね.","吉!そこそこだね.",\ 38 "凶!失敗続きかも...","凶!失敗続きかも...",\ 39 "大凶!逆にすごいね!"] 40 choice = random.choice(luck) 41 await message.channel.send(message.author.mention + "を占うよ.\n" + choice) 42 elif msg == 'exit()' or msg == 'quit()' or msg == 'shutdown': 43 await message.channel.send("終了するよ.おつかれ~.") 44 await client.close() 45 quit() 46 else: 47 hmsg = jaconv.z2h(msg.lower(),digit=True,ascii=True) 48 if hmsg.startswith('res'): 49 resist = ResDice.Resrole(hmsg) 50 if resist is not None: 51 await message.channel.send(message.author.mention + " 抵抗ロールだね." + resist ) #喧嘩はダメだよ?" + "\n" + resist) 52 print (resist) 53 else: pass 54 else: 55 result = Dice.Dicerole(hmsg) 56 print (result) 57 if result is not None: 58 if hmsg.startswith('s'): 59 sidlist.append(message.author.id) 60 await message.channel.send(message.author.mention + "\nシークレットダイスだね." +"\nおっけー,振りに行くよ!") 61 await message.author.send(result) 62 if sidlist.count(message.author.id)>=5: await message.author.send("ところで,そんなに私とDMしたいんだ?" + "\nふーん,ま,いいけど?") 63 else: 64 await message.channel.send(message.author.mention + " " + result) #("ねぇ," + message.author.mention + "\n" + result) 65 else: 66 pass 67 else: 68 pass 69 70client.run('')

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

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

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

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

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

guest

回答1

0

ベストアンサー

quit()しているからでは?

discord botのことは知りませんが、returnでは駄目なんでしょうか?

投稿2020/05/06 14:24

otn

総合スコア85901

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

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

zzzTKG

2020/05/06 22:32

quit()を消してbotのファイルをダブルクリックで起動後,discordでexit()を入力して終了するとdiscordとの接続が切れるだけでなく実行画面も閉じました.また,MailCallの方を実行し,discordでexit()を入力するとbotのみが終了し,MailCallの方はそのまま動いていてくれました. discordとの接続を切ったことでeventループが終了=botのプログラムが終了したということでしょうか? Pythonを始めて1カ月も経っていない新参者な上,初めて書いたプログラムがこれなのでdiscord依存の話なのか分からないのですが,discord botの話になってしまっていたらすみません.
otn

2020/05/06 23:16

おそらく、そういうことで、client.run('') が終了するのでしょう。
zzzTKG

2020/05/07 00:05

なるほどです.拙い質問とプログラムに御教授頂きありがとうございました. またの機会ありましたらよろしくお願いします.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問