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

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

新規登録して質問してみよう
ただいま回答率
85.46%
ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

Python

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

Q&A

解決済

1回答

914閲覧

自作モジュールをインポートし、scheduleライブラリを用いて定期実行したい。

apple_marcie

総合スコア12

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

Python

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

0グッド

0クリップ

投稿2021/11/29 00:30

編集2021/11/29 01:05

前提・実現したいこと

Twitter APIを用いてツイート等のデータを取得し、csvファイルに書き出す自作モジュールを定期実行するためにscheduleライブラリを利用したいと考えています。
しかし、ツイート取得の自作モジュールのインポートが上手くいかず、
ツイートの取得もcsvへの書き出しもできません。
本ページに載せたコードを実行すれば、5分ごとに同じディレクトリ内にあるツイート取得ファイルのMain関数が呼び出されることを希望しています。
試したコードを記載しますので、誤っている点をご指摘いただけると幸いです。
なお、呼び出し希望のファイルについては問題なく実行されますので、内容は割愛しております。

試したソースコードと発生している問題・エラーメッセージ

5分ごとに定期実行するコードです。

Python

1import schedule 2import time 3import tweetget_sys05 as ts5 #自作モジュール 4 5 6def Main(): 7 ts5.Main() 8 9 10if __name__ == "__main__": 11 schedule.every(5).seconds.do(Main) 12 13 n = 0 14 15 while n == 5: 16 schedule.run_pending() 17 time.sleep(1) 18 19 n + 1

上記のソースコードではエラーメッセージすら表示されず、何も実行されませんでした。

Python

1import schedule 2import time 3import tweetget_sys05 as ts5 4 5 6def Job(): 7 ts5.Main() 8 9def Main(): 10 11 schedule.every(5).seconds.do(Job) 12 13 n = 0 14 15 while n == 5: 16 schedule.run_pending() 17 time.sleep(1) 18 19 n + 1 20 21 22if __name__ == "__main__": 23 24 25 Main()

上記のように、自作モジュールを他の関数として分け、
稼働させるファイルの方のMain関数で呼び出す形でも実行されませんでした。
また、エラーメッセージの類も表示されていません。

import schedule import time import tweetget_sys05 as ts5 def Job(): ts5.Main() if __name__ == "__main__": schedule.every(5).seconds.do(Job) n = 0 while n == 5: schedule.run_pending() time.sleep(1) n + 1

また、Mainという関数名が被っているのが問題かと思い、
実行する関数名を変更しましたが、

Reloaded modules: tweetget_sys05

と表示され、やはり実行されませんでした。
エラーメッセージ等も表示されていません。

以上、三つのコードを実行しても書き込むcsvファイルの「最後に開いた日」が変更されていないため、
呼び出し希望のモジュールは稼働していないと思われます。

Python

1import tweetget_sys05 as ts5 2 3 4ts5.Main()

一方で、単純に上記のように読み込むと実行できるので
インポート表記のミスやインポート元のファイルの不備ではなさそうです。
また作業用ファイルとモジュールとして使いたいファイルは同じディレクトリ内にあります。

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

Python 3.8.8 (default, Apr 13 2021, 12:59:45)
Mac Book Air 2020 M1, Big Sur 11.6

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

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

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

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

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

y_waiwai

2021/11/29 00:33

上手くいかないとはどういうふうに上手くいかないんでしょうか。 そこらへん詳しく説明しましょう。 また、エラーが出たなら、エラーメッセージを提示しましょう エラーメッセージは、いらぬ翻訳省略しないで、出たそのママをコピペで提示してください
apple_marcie

2021/11/29 00:46

質問ありがとうございます。 そうですね。すみません、抽象的過ぎました。 まずエラーメッセージについてですが、投稿内にも記載した通り実行してもコンソールには本当に何も表示されません。 うまくいかないというのは、自作のモジュールが呼び出されずツイートの取得もcsvへの書き出しもできていないことを指しています。 本ページに載せたコードを実行すれば、5分ごとに同じディレクトリ内にあるツイート取得ファイルのMain関数が呼び出されることを希望しています。
guest

回答1

0

ベストアンサー

まず、while分の使いかたが間違えています。

python

1 n = 0 2 3 while n == 5: 4 schedule.run_pending() 5 time.sleep(1) 6 7 n + 1

これでは、nの初期値が0で、 whilega「nが5のとき」のみループになるという動作なので、1回もwhileループが実行されません。

意図しているところは、こうでしょうか。

python

1 n = 0 2 3 while n < 5: 4 schedule.run_pending() 5 time.sleep(1) 6 7 n + 1

だだし、これでもうまくいきません

最初に実行される5秒後が来るまえにプロセスが終了してしまうでしょう。nをもっと長くする必要がありますが、それでもしばらくすれば止ってしまいます。

基本的に、スケジュール実行は呼び出し側が動作いている時にしか実行されませんので、通常は、以下のように無限ループします。この場合止めるには強制終了します。

python

1 while True: 2 schedule.run_pending() 3 time.sleep(1)

投稿2021/11/29 01:56

編集2021/11/29 07:27
TakaiY

総合スコア12832

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

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

apple_marcie

2021/11/29 05:15

回答ありがとうございました! 無事プログラムを動かすことができました。 TakaiYさんのご指摘で解決したということはインポートのミスではなく、単にwhile文の扱い方に問題があったようです。 使い方をマスターできるよう頑張りたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問