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

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

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

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

Python 3.x

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

Python

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

Q&A

解決済

1回答

2774閲覧

Python パソコン起動時に自動的にwatchdogを使うプログラムが実行されるようにしたい

lin_ia

総合スコア2

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

Python 3.x

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

Python

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

0グッド

0クリップ

投稿2020/11/19 05:23

編集2020/11/20 07:58

前提・実現したいこと

プログラミング初心者です。
質問するのも初めてなので質問内容が悪ければ申し訳ございません。
環境
windows10 Pro ver.1909
Python3.7.7

・実現したいこと
パソコン起動時に
「フォルダを常時監視してxlsxファイルが作成されるとメールを送信する」
プログラムを実行する。

・現在の状況
Pythonのwatchdogを用いて、指定したフォルダを常時監視し、そのフォルダにxlsxファイルが作成されるとgmailを送信するプログラムを作成しています。
IDEやコマンドプロンプトでプログラムを実行すれば意図通りの結果となります。
しかし、パソコン起動時に自動的にプログラムが実行されるようにしたいのですがうまくいかずここに質問をしました。
よろしくお願いいたします。

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

エラーメッセージ

該当のソースコード

Python3.7.7

1import time 2import os 3import smtplib 4from email.mime.text import MIMEText 5from email.utils import formatdate 6from watchdog.events import FileSystemEventHandler 7from watchdog.observers.polling import PollingObserver 8 9FROM_ADDRESS = '****@gmail.com' 10MY_PASSWORD = '****' 11TO_ADDRESS = '****@****' 12BCC = '' 13SUBJECT = '****' 14BODY = '****' 15 16def create_message(from_addr, to_addr, bcc_addrs, subject, body): 17 msg = MIMEText(body) 18 msg['Subject'] = subject 19 msg['From'] = from_addr 20 msg['To'] = to_addr 21 msg['Bcc'] = bcc_addrs 22 msg['Date'] = formatdate() 23 return msg 24 25def send(from_addr, to_addrs, msg): 26 smtpobj = smtplib.SMTP_SSL('smtp.gmail.com', 465, timeout=10) 27 smtpobj.login(FROM_ADDRESS, MY_PASSWORD) 28 smtpobj.sendmail(from_addr, to_addrs, msg.as_string()) 29 smtpobj.close() 30 31BASEDIR = "C:\sample" 32 33def getext(filename): 34 return os.path.splitext(filename)[-1].lower() 35 36class ChangeHandler(FileSystemEventHandler): 37 38 def on_created(self, event): 39 if event.is_directory: 40 return 41 if getext(event.src_path) in ('.xlsx'): 42 if __name__ == '__main__': 43 to_addr = TO_ADDRESS 44 subject = SUBJECT 45 body = BODY 46 msg = create_message(FROM_ADDRESS, to_addr, BCC, subject, body) 47 send(FROM_ADDRESS, to_addr, msg) 48 49if __name__ in '__main__': 50 while 1: 51 event_handler = ChangeHandler() 52 observer = PollingObserver() 53 observer.schedule(event_handler,BASEDIR,recursive=True) 54 observer.start() 55 try: 56 while True: 57 time.sleep(1) 58 except KeyboardInterrupt: 59 observer.stop() 60 observer.join()

試したこと

1.スタートアップフォルダ(shell:startup)にプログラムを置いても実行されませんでした。
2.タスクスケジューラのタスクの開始トリガーを「スタートアップ時」に設定しましたが、タスクが完了されてしまい、常時ファイルを監視することができません。
イメージ説明
イメージ説明

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

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

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

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

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

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

plasticgrammer

2020/11/19 07:27

幾つか質問させてください。 - スタートアップフォルダに置いたのは、対象のPythonソースを実行するバッチファイルですか? - タスクスケジューラに登録したのは、「pythonコマンドの引数にソースファイルを指定したもの」または「バッチファイル」のどちらでしょうか? また、Windowsのイベントビューアにエラーログが登録されている可能性もありますので、ご確認をお願いします。
lin_ia

2020/11/19 08:29

コメントしていただきありがとうございます。 - スタートアップフォルダに置いたのは、対象のPythonソースを実行するバッチファイルですか? →.batファイル、.pyファイルの両方で試しました。 - タスクスケジューラに登録したのは、「pythonコマンドの引数にソースファイルを指定したもの」または「バッチファイル」のどちらでしょうか? →.batファイルです。 イベントビューアを確認しましたがエラーログは見つけられませんでした。 役に立つか分かりませんがタスクスケジューラの履歴の画像を質問に追加します。 よろしくお願いいたします。
NagaseTomohiko

2020/11/19 11:53

タスクスケジューラから手動で実行した場合は動いているのでしょうか。 スケジューラへの登録が誤っているから動かないのでは?と考えております。
lin_ia

2020/11/20 08:01

NagaseTomohiko様 コメントありがとうございます。 手動で実行してもうまくいきませんでした。 タスクスケジューラのプログラムを設定する画面の画像を追加しました。 こちらの設定が間違っているのでしょうか? また、バッチファイルのの作成方法についても質問です。 .pyファイルをIDEの形式を選択して保存より.batを選択してバッチファイルを作成しました。 この方法が間違っていますか? よろしくお願いいたします。
NagaseTomohiko

2020/11/20 12:28 編集

タスクスケジューラの設定は大丈夫そうです。 すみませんが、IDEからバッチファイルを作成したことがないので、その方法については何とも言えません。 2つ確認があります。 1.「コマンドプロンプトでプログラムを実行すれば意図通りの結果」とありますが、それはどのようにプログラムを実行したのでしょうか。そのとおりにスケジューラを設定して手動で起動したら動く気がしますが。 2.(手動起動を含め)スケジューラからの実行がうまく行かないというのは、どうやって確認していますか?プログラム実行中のコマンドプロンプトが表示されないことでしょうか、Excelを置いてもメールが送信されないことでしょうか。
lin_ia

2020/11/24 08:33

NagaseTomohiko様 コメントありがとうございます。 別の方の回答で解決しました。 お忙しい中ご協力いただきありがとうございました。
guest

回答1

0

ベストアンサー

タスクスケジューラで
temp11119.batの中身はPythonのコードだったら動かないですよ

batの中はpython ファイルの場所と対象のファイル名.py

例:python c:\py\pg.py

投稿2020/11/21 07:16

編集2020/11/21 07:18
AMK

総合スコア765

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

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

lin_ia

2020/11/24 08:34

AMK様 ご回答の通り実行したところ解決しました。 困っていたので本当に助かりました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問