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

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

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

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Python 3.x

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

Python

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

Q&A

解決済

1回答

18140閲覧

指定時刻にある関数を実行する方法

Malfoy

総合スコア7

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Python 3.x

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

Python

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

0グッド

0クリップ

投稿2017/10/11 16:43

編集2017/10/11 16:45

pythonで指定時刻にある関数を実行するにはどうしたらいいのでしょうか?

調べるとイベントスケジューラなるものを見つけました
https://docs.python.org/ja/3.6/library/sched.html

例えば、2017-10-13 0:00:00に関数abcを実行したいとします

Python

1import sched 2import time 3 4def abc(): 5 print('関数abcが実行されました') 6 7scheduler = sched.scheduler(time.time, time.sleep) 8run_at = time.strptime('2017-10-13 0:00:00', '%Y-%m-%d %H:%M:%S') 9run_at = int(time.mktime(run_at.timetuple())) 10scheduler_e = scheduler.enterabs(run_at, 1, abc(), ())

しかし、結果はスクリプトを実行した瞬間に関数abcが実行されてしまいます
どのようにしたらよいのでしょうか?ご教授お願い致します

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

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

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

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

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

guest

回答1

0

ベストアンサー

enterabs()の引数に abc() を渡していことが不具合の原因かと思います。
この場合、まず最初に abc() を実行され、その戻り値(None) が enterabs() の第3引数として渡りますので、「スクリプトを実行した瞬間に関数abcが実行されて…」という結果となります。

とりあえず、下記のようにコードを編集したところ動作しました。
(Python3系のみ動作確認)

import sched import time from datetime import datetime def abc(): print('関数abcが実行されました') scheduler = sched.scheduler(time.time, time.sleep) run_at = datetime.strptime('2017-10-12 12:00:00', '%Y-%m-%d %H:%M:%S') run_at = int(time.mktime(run_at.utctimetuple())) scheduler.enterabs(run_at, 1, abc) scheduler.run()

変更点は

  • enterabs() の 引数に渡す関数を abc() から abc に変更
  • abc() 関数に引数を渡す必要がないので、enterabs()の第4引数を削除
  • scheduler.run() を追加
  • time.strptime()datetime.strptime() に修正

以上です。

投稿2017/10/12 02:31

magichan

総合スコア15898

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

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

Malfoy

2017/10/12 12:12

回答ありがとうございます とても勉強になりました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問