🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Python 3.x

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

Q&A

解決済

1回答

967閲覧

Python ファイル自身を実行したい

Glue_cat

総合スコア4

Python 3.x

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

0グッド

1クリップ

投稿2021/03/05 01:12

編集2021/03/05 04:18

一連の処理が終わった後に、whileなどを使わずそのファイル自身をそのファイル内で再度実行したいのですが実現させる方法はあるのでしょうか??

そのファイル内でimport[自身]をすれば、そのファイル自身が実行されますが、別の方法があればご教授願います。

↓がpyinstallerでexe化したものだと機能しない

python

1ファイル名:test.py 2 3option = Options() 4option.add_argument('enable-crash-reporter') 5#プロファイル指定 6PROFILE_PATH = r'PATH' 7option.add_argument('--user-data-dir=' + PROFILE_PATH) 8driver=webdriver.Chrome(executable_path="PATH",options=option) 9driver.set_window_size('1200', '1000') 10driver.implicitly_wait(10) 11 12#再起動 13def restart(): 14 driver.quit() 15 import test 16 17#ログイン情報入力 18def login_info_input(): 19 login_id = input('') 20 login_pass = input('') 21 after_login_process(login_id, login_pass) 22 23#ログイン 24def after_login_process(id, pass): 25 driver.get('URL') 26 ... 27 #ログイン後再起動 28 restart() 29 30login_info_input()

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

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

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

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

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

guest

回答1

0

ベストアンサー

import[自身]をやっても、一回しかできなくて、二回目は動かないですね。

無理やりやるとしたら、そのファイルの中で自分自身のファイルを別名でコピーしてimportすれば、できないことはありません。

ループを行いたくない理由は何かあるのでしょうか。

理由はなんとなくわかりました。

subprocessの使い方の例です。

同一フォルダ内に master.py と worker.py を置いてあります
master.pyの中身です。

master

1import subprocess 2 3def check_login_id(x): 4 return True 5 6def check_login_pass(x): 7 return True 8 9if __name__ == '__main__': 10 11 WORKER = "worker.py" 12 13 while True: 14 login_id = input('enter login_id: ') 15 if login_id in 'eEqQ': 16 exit(0) 17 if check_login_id(login_id) == False: 18 exit(1) 19 login_pass = input('enter login_pass : ') 20 if check_login_pass(login_pass) == False: 21 exit(1) 22 subprocess.run(["python", WORKER, login_id, login_pass])

worker.pyの中身です。

worker

1import sys 2 3login_id = sys.argv[1] 4login_pass = sys.argv[2] 5 6print('login_id =', login_id) 7print('login_pass =', login_pass) 8 9print('COMPLETE')

事項例は以下です。

shell

1(base) subprocess> python master.py 2enter login_id: aaa 3enter login_pass : bbb 4login_id = aaa 5login_pass = bbb 6COMPLETE 7enter login_id: xxx 8enter login_pass : yyy 9login_id = xxx 10login_pass = yyy 11COMPLETE 12enter login_id: e 13(base) subprocess>

このように、パラメータの設定はmaster.pyで行い、実作業はworkerが実行するようにしてみてはどうでしょうか。

投稿2021/03/05 01:35

編集2021/03/06 09:47
ppaul

総合スコア24670

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

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

Glue_cat

2021/03/05 01:55 編集

seleniumでgmailにログインした後に、ログアウトして別のアカウントにログインしたいのですができないんですよね。(エディタ上ではドライバをquit()で終了した後import[自身]で動くのですが、pyinstallerでexe化したものを動かすとエラーしてしまいます。ちなみに、user-data-dirで1つのプロファイルを指定しています)
ppaul

2021/03/05 03:16

性能的にはかなり遅くなりますが、全体制御用のプロセスを立てておいて、seleniumを使う方はサブプロセスとしてpython自体からロードし直せばよいように思います。
Glue_cat

2021/03/05 06:24 編集

すみません!理解ができないので、何かそれについて書いてあるサイトなどを教えてくれると嬉しいです!
Glue_cat

2021/03/05 04:18

コードを追加しました○
Glue_cat

2021/03/05 23:35

もう少し具体的に教えてくれると助かります!
ppaul

2021/03/06 09:47

例を追加しました。
Glue_cat

2021/03/23 01:12

返答が遅れ申し訳ありません。 無事解決したのですが何点か聞きたいことがあるので、お時間あれば回答していただけると嬉しいです。 ①if __name__ == '__main__':を使った理由 ②なぜ、どのようにしてこのような発想に至ったのか を知りたいです。
Glue_cat

2021/03/23 02:30

それと、pyinstallerでexe化したときに、worker.pyが見つからず動作しないのですが何か解決策ありますか?
ppaul

2021/03/23 04:42

①if __name__ == '__main__':を使った理由 普通、このように書きます。定型文のようなものです。 https://programming-study.com/technology/python-if-main/ あたりをお読みください。 本当の意味を理解するためには、python処理系のframオブジェクトとかmoduleオブジェクトの勉強が必要です。
ppaul

2021/03/23 04:51

②なぜ、どのようにしてこのような発想に至ったのか というのは、mastarとworkerの作業分担のことでしょうか。 30年ほど前、並列処理系の開発をしていましたので、こういう発想になります。
ppaul

2021/03/23 04:55

pyinstallerでexe化はやったことがありませんので、確実な答えは知りません。 私が自分で試すとすると、まずworker.pyからworker.exeを作成します。そしてパスの通ったところに置きます。 次に、master.pyの WORKER = "worker.py" を WORKER = "worker.exe"に変更して実行してみます。 これがうまくいけば、master.pyからmaster.exeを作成します。
Glue_cat

2021/03/24 00:00 編集

質問への回答ありがとうございます! "パスの通ったところに置く"というのは、worker.pyやmaster.pyがある場所に置くということですよね? [worker.py, master.pyが置いてある場所]/worker.exe': [Errno 2] No such file or directory となってしまします。 [worker.py, master.pyが置いてある場所]には間違いなくworker.exeは存在しています。
Glue_cat

2021/03/30 03:10

返信遅れ申し訳ありません。 おかげさまで無事実現することができました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問