やりたいこと
あるサイトから日経平均を比較して、ポイント運用の引きだしタイミングを算出し、
引き出すときにプッシュ通知を行う というものを作ろうとしてます。
めんどくさくてアプリにはしてませんが
発生している問題・エラーメッセージ
エラーとしては、pdbで1行ずつテストコードを流して、うまく動くかの確認をしたところ
subprocess.callのところでパーミッションエラーが起こりました。
推定ですが原因としては、仮想環境からsubprocessやosなどといった標準モジュールをimportしたとき、
仮想環境でなく、仮想環境をつくった元のpythonから引っ張ってきているのが問題かと思います。
そこでドライブをまたいでいるため 実行できないよと言われていると思います。
python
(nikkeipy) P:\nikkei>python Python 3.10.4 (tags/v3.10.4:9d38120, Mar 23 2022, 23:13:41) [MSC v.1929 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information.>>> import subprocess >>> subprocess <module 'subprocess' from 'F:\\Program Files (x86)\\Python\\Python310\\lib\\subprocess.py'>
-> subprocess.call("P:\nikkei\nikkeipy\Scripts\python.exe main.py".split()) #何もない時 期待値:ファイルが作られて、値が入る (Pdb) n PermissionError: [WinError 5] アクセスが拒否されました。
該当のソースコード
python
import subprocess import os if __name__=='__main__': with open("main.py","r") as f: tmp = f.read() tmp = tmp.replace("termux-notification -t point_get_timing -c fx_check","echo fx_check") tmp = tmp.replace("termux-notification -t dataGetError -c site_changed","echo site_error") tmp = tmp.replace("termux-notification -t file_error -c filebroken","echo recreate") with open ("main.py","w") as f: f.write(tmp) subprocess.call("P:\nikkei\nikkeipy\Scripts\python.exe main.py".split()) #何もない時 期待値:ファイルが作られて、値が入る os.remove("prev.json") with open("prev.json","w") as f: f.write("11.2") subprocess.call("P:\nikkei\nikkeipy\Scripts\python.exe main.py".split()) #ファイルが既にある時 期待値:ファイルが既にあるが、想定の型式と違うので、新しく値が入れられる
試したこと
1.sys.pathにFドライブのものが入っていたので、強制的に削除。その後 再度import 結果失敗
python
>>> del subprocess >>> sys.path ['', 'F:\\Program Files (x86)\\Python\\Python310\\python310.zip', 'F:\\Program Files (x86)\\Python\\Python310\\DLLs', 'F:\\Program Files (x86)\\Python\\Python310\\lib', 'F:\\Program Files (x86)\\Python\\Python310', 'P:\\nikkei\\nikkeipy', 'P:\\nikkei\\nikkeipy\\lib\\site-packages']>>> sys.path = [path for path in sys.path if "P:" in path] >>> sys.path ['P:\\nikkei\\nikkeipy', 'P:\\nikkei\\nikkeipy\\lib\\site-packages']>>> import subprocess >>> subprocess <module 'subprocess' from 'F:\\Program Files (x86)\\Python\\Python310\\lib\\subprocess.py'>
環境
Python 3.10.4
Windows 10 64bit home
お忙しいかと存じますが、回答のほどよろしくお願いいたします。

0 コメント