【まず1嫁】くだすれPython(超初心者用) その58

■ このスレッドは過去ログ倉庫に格納されています
2022/09/07(水) 10:33:53.50ID:RjZl78eW
当スレに★Python以外のプログラミング言語での回答類を書くべからず★
派生言語はそれぞれ専スレがある(この板にあるとは限らない)ので、そっち池。
「Ruby」「Rails」「某言語では」「クソチョンw」をNGワード登録推奨。荒らしは、完全スルー放置が一番きらいです。

このスレッドは「お勉強」スレのほうには書き込めない超低レベル、
もしくは質問者自身何が何だか分からない質問を、勇気を持って書き込むスレッドです。
へび使いが優しくコメントを返しますので、お礼は Python の布教と初心者の救済をお願いします。

★エラーを解決したい場合★は、
  表示されたエラーの全文(勝手に省略やスクショうp等の横着クソ行為禁止)と、
  実行環境(Pythonのバージョン・OSとIDEの種類およびバージョン)をシッカリ書くこと。

Pythonの★ソースコードをそのまま5ちゃんに貼るとインデントが崩れてチヌ★
【【【複数の連続半角スペースはなにもなかったことにされる&タブは普通には入れられない】】】掲示板の仕様なので、
プログラム文は↓等の、いわゆるコードうp用サイトに貼ってこいください。
ttps://techiedelight.com/compiler/  Run Code機能あり。
ttp://ideone.com/      デフォ設定はC用のため、言語選択ボタン押下がピコ手間かも。
ttp://codepad.org/      ほぼ直感的に使える。Run codeボタンあり。
ttp://pastebin.com/     まずまずシンプル。
ttp://dpaste.com/      とてもシンプル。消えるまでの日数は十分長ーく指定のこと。

◇Python公式◇ http://www.python.org/
◇まとめwiki◇ ttp://python.rdy.jp/wiki.cgi

〇前スレ〇
【まず1嫁】くだすれPython(超初心者用) その57
https://mevius.5ch.net/test/read.cgi/tech/1653225908/

次スレたては >>985 あたりが挑戦する。
### END OF TEMPLATE ###
370363
垢版 |
2022/12/11(日) 15:32:54.99ID:HrCBt1qU
レスありがとうございます
ちなみにカードゲームを作っていて、スーパークラスがPlayer、
サブクラスがHuman・Computerです

>>365
はい、それは時間が経った時に実感します
ただ今回は300行程度の短いものですから…

>>368
そうなんですね
ただ、そのスーパークラスをインスタンス化することは無いです

>>369
そうなんですか
いろいろ制約をかけるとPythonらしくない、と人に言われたこともありまして
2022/12/11(日) 19:28:32.33ID:EEtCFdnW
よくいる賛同欲しいそれ以外お断り系質問の匂いがしますね違うかな
372デフォルトの名無しさん
垢版 |
2022/12/11(日) 19:46:01.79ID:tS4zFrKc
NotImplementedErrorで良くね派
実際にメソッド呼ぶまでエラーにならないのが欠点だがABCMetaはめんどい
373370
垢版 |
2022/12/12(月) 22:08:43.56ID:1+Ogth18
>>371
確かに…
以後気を付けます

>>372
ありがとうございます
検討します
374デフォルトの名無しさん
垢版 |
2022/12/14(水) 21:44:28.17ID:XhtdH9iq
>>370
>>スーパークラスをインスタンス化することは無い

>>363
>>354
スーパークラスは一応通常クラスにしてあります

矛盾してるんだよな
意味わからず調べず返事するからだろうけど
375デフォルトの名無しさん
垢版 |
2022/12/14(水) 21:53:17.73ID:XhtdH9iq
>>371
都合の悪い意見はスルーしてるんだよな

あるいは馬鹿は自分の理解の及ばない単語は目に入らない
(スルーしてるんじゃなくマジで見えない)という話があるがそれかもしれん
376デフォルトの名無しさん
垢版 |
2022/12/14(水) 22:44:36.02ID:MDY4fnZr
素人質問で恐縮なのですが、
…なんて常套句はさておき、本当に本当の初心者なのでLv低い質問だと思いますが、

b = 2
と入力して、
type(b)
で、変数bの型は何ですか?と聞くだけの超簡単なコマンドのはずなのに
何でエラーが出てしまうんでしょう?
(ここで躓いているようじゃ先が思いやられるかな?)
(スクショ貼れませんでした、すみません)
誰かよろしくおねがいします
377376
垢版 |
2022/12/14(水) 22:47:39.51ID:MDY4fnZr
環境はgoogle drive上のgoogle colabolatoryでやっています。
ちなみにwindows10です。
スクショ貼ろうとしましたが、うpろだの多分urlがNGワードに引っかかっちゃったみたいです
2022/12/14(水) 22:50:23.63ID:sU0yxaOg
エラー出ないのでその情報じゃなんもわからん
379376
垢版 |
2022/12/14(水) 22:57:09.58ID:MDY4fnZr
確かにもっともなご指摘・・・
これで貼れるでしょうか?
https://imgur.com/a/96Z0WgY
2022/12/14(水) 23:03:55.05ID:kP9TY3cy
それこそColabなら共有(共同作業)できるから
捨て垢でやり直してリンク貼ったらどうか
2022/12/14(水) 23:09:40.60ID:NEZYoEtN
>>379
typeっていう名前の変数を定義してないか?
382376
垢版 |
2022/12/14(水) 23:20:08.50ID:MDY4fnZr
>380
それも手ですね
分からなかったらそうします

>381
予約語を変数として定義できるんですか?
定義してるかどうかは、どうやって確かめますか?
2022/12/14(水) 23:36:24.27ID:SV0C9PdI
del type
384376
垢版 |
2022/12/14(水) 23:41:19.54ID:MDY4fnZr
>383
ありがとうございます、解決しました!!
色々と変にいじってたうちにtypeに変数を定義しちゃってたのが原因だったみたいですね。
これで先に進めます。
385デフォルトの名無しさん
垢版 |
2022/12/15(木) 01:16:43.12ID:jZ5UYKI0
>>382
>予約語を変数として定義できるんですか?
できないです。SyntaxErrorがおきます
386デフォルトの名無しさん
垢版 |
2022/12/15(木) 01:20:47.13ID:kymHgKbk
えっ?
387デフォルトの名無しさん
垢版 |
2022/12/15(木) 01:36:22.80ID:XVN1N3BK
予約語ってのはdelとかforとか文を形成するものじゃない?厳密には違うかもしれないけど書き換わったら根本的に意味をなさないもの
typeとかは組み込み関数だけど、場合によっては別の関数で上書きして使いたいときがあるかもしれない。便利機能を追加するときとか
388デフォルトの名無しさん
垢版 |
2022/12/15(木) 04:22:37.68ID:NZLYDmOy
なるほど
2022/12/16(金) 03:13:08.59ID:mVqdHhnt
pycharmの最新版を入れたら、デバッグの時に日本語が文字化けするようになったわ。
2022/12/16(金) 06:30:54.79ID:BMo1BRTS
pipで入れれるツールをよく作るのですが、インストール後に生成したファイル(アクセストークン、設定、キャッシュなど) はどこに保存するのが普通ですか?
アンインストール時に一緒に消せるようにしたいのですが、package dataだと最初からファイルが存在している必要があり、管理がしにくく思っています。
なにか実践されてる方法をご存知でしたら教えてください。
391デフォルトの名無しさん
垢版 |
2022/12/17(土) 15:32:13.15ID:REqE3zrN
質問っす。
マルチグラボで並列処理をpythonでしたいとき
何がおすすめですか?
vs?colab?charm?
2022/12/17(土) 16:20:39.02ID:38dnloyr
>マルチグラボで並列処理
肝心のここが謎だけどその並列処理ツールの公式サイトで聞いたら?
きっと好きなの使えっていわれるよ
2022/12/17(土) 20:09:38.48ID:hPgT/cMS
無理やりチェーンメソッドみたいな事が出来るようになるAPIはありませんか?
自力だとこんな感じでしか思いつかなかったのですが
https://ideone.com/y1cK9w
394デフォルトの名無しさん
垢版 |
2022/12/17(土) 20:17:08.64ID:REqE3zrN
>>392
ありがと!
ついでにflaskとdjangoやりたいんだが
pycharm一択ですか?
2022/12/18(日) 00:00:30.20ID:akxhfAdN
pycharmの無料版はWeb開発に必要な機能がまるっと削られてるからflaskやdjangoやるなら課金必須
無料ならVSCode一択
396デフォルトの名無しさん
垢版 |
2022/12/18(日) 09:52:24.31ID:aCP/2AKW
指定したフォルダの階層内のフォルダ名を一括で変更したいのですがどうしたら良いですか?
例えば、以下のような階層で、「test」と名前がつくフォルダを一括で「changed」に変更したいです。
test
|_aaa
|_test
|_iii
|_test
397デフォルトの名無しさん
垢版 |
2022/12/18(日) 09:53:03.96ID:aCP/2AKW
インデントが反映されなかったのでもう1度

test
 |_aaa
  |_test
   |_iii
    |_test
2022/12/18(日) 10:14:02.68ID:pp8ifc2A
再帰でフォルダ名のリストを作る
一番深いフォルダからリネームする
399デフォルトの名無しさん
垢版 |
2022/12/18(日) 10:52:22.78ID:aCP/2AKW
>>398
深い階層からって難しくないですか?
2022/12/18(日) 11:48:07.32ID:ciqdCn4z
>>399
まずは再帰について学ぼうか
401デフォルトの名無しさん
垢版 |
2022/12/18(日) 11:58:44.72ID:aCP/2AKW
>>400
再帰はさすがに知ってます
402デフォルトの名無しさん
垢版 |
2022/12/18(日) 12:00:25.16ID:aCP/2AKW
フォルダ一覧の配列を取得したら、その配列の順番をひっくり返すだけで大丈夫そうですか?
2022/12/18(日) 12:12:18.14ID:ciqdCn4z
再帰知ってて>>399とか意味わからん
知ってるのは名前だけとかいうオチじゃないよね?
とりあえず>>398のリストを作ってみようか
再帰知ってるなら簡単だよね
404デフォルトの名無しさん
垢版 |
2022/12/18(日) 12:17:35.71ID:aCP/2AKW
>>403
上の階層から順番に処理する場合での再帰って言うのでは・・・
405デフォルトの名無しさん
垢版 |
2022/12/18(日) 12:17:37.31ID:jVnwI9CT
>>402
globとか考えてるならワンチャンsortしたらいけるかもしれないけど、自分で深さ優先探索してサブディレクトリがなくなったらリネームして親ディレクトリに戻って他のサブディレクトリに移って同じことをするみたいな実装が確実
os.walkでいけるのかな
406デフォルトの名無しさん
垢版 |
2022/12/18(日) 12:18:32.41ID:aCP/2AKW
>>403
上の階層から順番に処理する場合でも再帰って言うのでは・・・
407デフォルトの名無しさん
垢版 |
2022/12/18(日) 12:21:53.43ID:aCP/2AKW
再帰関数っていうのは関数内で自分自身を呼び出すことだし、別に再帰には後ろから順番に処理するって意味は含まれてなくて、ループを使わずに同じ処理を繰り返す的な意味なのでは
408デフォルトの名無しさん
垢版 |
2022/12/18(日) 12:25:20.51ID:aCP/2AKW
再帰の意味はともあれ、これで行けそうです
見つけました
https://www.curict.com/item/48/4807c14.html
2022/12/18(日) 12:34:42.73ID:ciqdCn4z
>>404,406
誰も上の階層からやるやつを再帰と言わないなんて言ってない
人のレスにケチつけるだけの人みたいだから俺は匙投げるわ
410デフォルトの名無しさん
垢版 |
2022/12/18(日) 12:37:28.05ID:dO1j2fxY
>>402 みたいな発言観ると池沼っているんだなって判る
411デフォルトの名無しさん
垢版 |
2022/12/18(日) 12:38:12.64ID:aCP/2AKW
>>409
再帰の本当の意味をあなたが知らなかっただけですよね?
412デフォルトの名無しさん
垢版 |
2022/12/18(日) 12:40:05.30ID:aCP/2AKW
匙投げるも何も既に解決したと書いてるんですが笑笑
コードも示せない人は回答しないで欲しいですね
413デフォルトの名無しさん
垢版 |
2022/12/18(日) 12:41:20.99ID:dO1j2fxY
池沼は煽ると発狂してレスが増えるから判り易い
414デフォルトの名無しさん
垢版 |
2022/12/18(日) 13:09:02.70ID:I9Yb5Gss
https://ideone.com/52ixhm
どう
415デフォルトの名無しさん
垢版 |
2022/12/18(日) 14:14:57.50ID:zER91A4Q
>>398
わざわざリストする必要もなければ
わざわざ一番深いフォルダからリネームする必要もないでしょ

そうしたほうがいいユースケースがあるのは分かるが今回は質問者が疑問に思う方がまとも
2022/12/18(日) 16:52:43.20ID:UTT6KxDb
浅い方のフォルダを先にリネームしたら深い方のフォルダのフルパス変わるから悪手だと思う
2022/12/18(日) 17:00:10.03ID:2i9VTMTT
再帰が後ろから処理するのは事実
2022/12/18(日) 17:16:13.18ID:4T78MPGL
幅優先と深さ優先の話でしょ?
2022/12/18(日) 17:40:00.53ID:ciqdCn4z
後ろからとか言うのはよくわからんけど幅優先と深さ優先にしてもどちらも再帰で処理できるでしょ
420デフォルトの名無しさん
垢版 |
2022/12/18(日) 17:46:32.33ID:hT8eQZti
>>416
深い方のフォルダのフルパスが変わったら何が問題なの?
2022/12/18(日) 17:47:49.48ID:0kkAgxkU
カレントのフォルダ列挙して
各フォルダに再帰呼び出しした後
リネームするだけだと思う
422デフォルトの名無しさん
垢版 |
2022/12/18(日) 17:57:12.11ID:d6DD8mST
再帰はglobやrglobがやってくれる
↓こういうので何か問題ある?

for x in Path(‘.’).rglob(‘test/‘):
__x.rename(str(x).replace(‘test’, ‘changed’))
2022/12/18(日) 19:16:01.59ID:2iV+0qph
30代Python男はクソチョン強姦魔
2022/12/18(日) 19:47:03.04ID:ciqdCn4z
>>422
ループ内でループの選択項目を変更するのはちょっと怖いわ
rglob() とかは大丈夫なんだっけ?
2022/12/18(日) 21:05:52.90ID:ew4wvnMN
プログラミング初心者です。質問させてください。
pythonとseleniumでスクレイピングを始めました。
関数の引数に変数を指定したいのですがうまくいきません。
スクリプトはpastbinに貼りました。
https://pastebin.com/uznZaB7n
本来はBy.CSS_SELECTOR等が入る位置に、fix_search_methodと称する変数を入れることでBy.LINK_TEXTやBy.CSS_SELECTORと指定したいのですがInvalidArgumentExceptionと出てしまってうまくいきません。

また、必要性は低いと思うのですが、presence_of_element_locatedの括弧のところで直にBy. + search_methodと短く書くことは可能でしょうか。
初歩的な質問だと思い申し訳ないのですが、よろしくお願いします。
2022/12/18(日) 21:19:21.74ID:UTT6KxDb
>>420
>>421みたいな発想がなかったすまん
2022/12/18(日) 21:25:40.52ID:2i9VTMTT
>>426
これは深い方からやっています
428デフォルトの名無しさん
垢版 |
2022/12/19(月) 11:23:36.91ID:itMdNDye
30代Pythonクソチョン男は強姦魔の犯罪者!
雇うときには 父母と祖父母の戸籍謄本を提出させましょう!
2022/12/19(月) 23:45:01.33ID:ahw2JnZF
>>427
そらまた勝手に引き合いに出してすまん
2022/12/20(火) 06:02:07.12ID:VwdPHvLy
>>389
設定にコンソール画面の文字コードの設定が新たにできたみたい。
エディター>一般 |>コンソールのところを設定したら治った。
2022/12/21(水) 21:30:04.82ID:5PU21m8R
PySide6でqasync利用して@asyncSlotしたメソッドから
aiohttp.ClientSession.get呼ぶと止まっちゃうんですけど回避方法ありませんか
timeoutいれてみるとタイムアウトになります
432デフォルトの名無しさん
垢版 |
2022/12/28(水) 23:20:39.25ID:n1i3RgfV
ChatGPTにyoutubeの登録者数を取得するコードを聞いたら以下のように教えられてやってみたんですが、「AttributeError: type object 'Credentials' has no attribute 'from_api_key'」と表示されて動きませんでした。
本当はどうすればよかったんでしょうか。

# APIキーを設定
api_key = "YOUR_API_KEY"

# google-authとgoogle-api-python-clientライブラリをインポート
from google.oauth2.credentials import Credentials
from googleapiclient.discovery import build

# YouTube APIのサービスを構築
youtube = build("youtube", "v3", credentials=Credentials.from_api_key(api_key))

# チャンネルIDを設定
channel_id = "UC_CHANNEL_ID"

# YouTube APIを呼び出して、チャンネルの登録者数を取得
response = youtube.channels().list(
id=channel_id,
part="statistics"
).execute()

# 登録者数を表示
print(response["items"][0]["statistics"]["subscriberCount"])
433デフォルトの名無しさん
垢版 |
2022/12/28(水) 23:20:53.28ID:n1i3RgfV
また、以下はそんなライブラリ使わなくてもこうすればできるのにと思って書いたコードで普通に動くやつです。


API_KEY = 'MY_API_KEY'

import urllib.request
import json

# チャンネルIDを設定
channel_id = 'UCZf__ehlCEBPop-_sldpBUQ'

# URLを設定
url = f'https://www.googleapis.com/youtube/v3/channels?part=statistics&id={channel_id}&key={API_KEY}'

# GETリクエストを実行
response = urllib.request.urlopen(url)

# レスポンスボディを取得しJSON形式に変換
data = json.loads(response.read())

# 登録者数を取得
subscriber_count = data['items'][0]['statistics']['subscriberCount']

print(subscriber_count)

google-authとgoogle-api-python-clientライブラリを使うメリットって何なんでしょうか。
教えていただければと思います。
434デフォルトの名無しさん
垢版 |
2022/12/28(水) 23:42:53.51ID:oCgdgjHS
それもChatGPTに聞けよ
435デフォルトの名無しさん
垢版 |
2022/12/28(水) 23:54:35.12ID:n1i3RgfV
>>434 確かに

Google-authとgoogle-api-python-clientライブラリを使用することで、YouTube APIを使用してYouTubeチャンネルの登録者数を取得することができます。

GETリクエストを実行することでも、YouTube APIを使用してYouTubeチャンネルの登録者数を取得することはできますが、Google-authとgoogle-api-python-clientライブラリを使用することにより、以下のようなメリットがあります。

コードが簡単である。Google-authとgoogle-api-python-clientライブラリを使用することで、APIの呼び出しや結果の取得を簡単に行うことができます。
認証が簡単である。Google-authを使用することで、APIを使用するための認証が簡単に行えます。
他のAPIを使用することができる。Google-api-python-clientライブラリを使用することで、Google Cloud Platformの他のAPIを使用することができます。
また、Google-authとgoogle-api-python-clientライブラリを使用することで、APIを使用するための認証やAPIの使用に関するエラー処理なども簡単に行うことができます。

ただし、Google-authとgoogle-api-python-clientライブラリを使用することにより、APIを使用するために必要なライブラリが増えるため、ライブラリを使用することで必要になるライブラリを読み込む処理や、ライブラリのインストールが必要になることがあります。
2022/12/29(木) 06:04:08.55ID:KLxb2KfB
基本、スクレイピングは攻撃・営業妨害になるので、契約してAPI を使うべき!

図書館へ何万回もアクセスして、逮捕された香具師もいるから、
全てのスクレイピングの本には必ず、APIを使うように書いてある
2022/12/29(木) 08:24:12.90ID:xv5xMvYF
AIが進化するに連れ、結局僕らも機械的に思考してるだけなんだなってつくづく思う
2022/12/29(木) 08:26:42.17ID:aQnkLE0r
>>436
F5アタックと変わらんからな
Pythonがスクレイピングツールとして悪用されている現状を憂う
2022/12/29(木) 09:36:19.10ID:0q5LNPKO
5分に1回スクレイピングしてるわ
2022/12/29(木) 10:56:16.18ID:gtT5qicu
スーパー・スクレイバーじゃん
441デフォルトの名無しさん
垢版 |
2022/12/30(金) 00:20:51.92ID:d9Nxjwsh
DL siteはAPI公開してないようですが、何秒に1回なら良いでしょうか?
(dlsite.com/maniax/work/=/product_id/RJXXXXXX.htmlみたいなページのデーブルデータを取りに行くもの)
2022/12/30(金) 09:05:19.28ID:KrdFdQSs
>>441
robots.txt見たらそのURLはアクセス禁止に指定されてるね
スクレイピングするなって事じゃないかな
443デフォルトの名無しさん
垢版 |
2022/12/31(土) 08:00:21.75ID:5FWsFypL
質問失礼します。python初心者でよく問題の意味が分からないので答えを教えて頂きたいです。
一つ目の問題は、次のような10個の数字を配列に代入し、くり返し命令を使って、一つずつ表示させてみよう。2、5、8、9、30、45、55、102、183、209 が一つ目の問題です。
二つ目の問題は、(1)の10個の数字に対して、単純前方探索のアルゴリズムを使って、指定した数字を見つけるプログラムを考えてみよう。また、何回目の比較で見つかったかを表示させてみよう
が2つ目の問題です。
どうかご協力お願い致します。
2022/12/31(土) 08:07:03.93ID:h+i7/rFS
宿題?
445デフォルトの名無しさん
垢版 |
2022/12/31(土) 08:08:31.91ID:5FWsFypL
>>444
そうです
2022/12/31(土) 08:21:58.09ID:COsZwLRS
自分でどこまで書けたん?
2022/12/31(土) 08:47:14.30ID:mlllu47p
マルチ、スルー推奨
https://mevius.5ch.net/test/read.cgi/tech/1670470167/207
448デフォルトの名無しさん
垢版 |
2022/12/31(土) 09:06:51.59ID:5FWsFypL
>>446
何も書けれてません
449デフォルトの名無しさん
垢版 |
2022/12/31(土) 09:20:31.79ID:5FWsFypL
>>447
荒らしじゃないです(´;ω;`)
2022/12/31(土) 09:32:23.43ID:YncayN1e
クソスレまで立てといてなに言ってるんだかw
https://mevius.5ch.net/test/read.cgi/tech/1672321555/2
451デフォルトの名無しさん
垢版 |
2022/12/31(土) 09:36:52.14ID:5FWsFypL
>>450
5ちゃんねるするの初めてだったんです…
ルールとかわからずスレ立ててしまって申し訳ないです(´;ω;`)今度から気をつけますね。
452デフォルトの名無しさん
垢版 |
2022/12/31(土) 13:11:41.62ID:pFPmTYEQ
>>451
死ねよ
453デフォルトの名無しさん
垢版 |
2022/12/31(土) 17:33:52.87ID:TeLjBPNY
意地悪しないで教えてやれよ。
454デフォルトの名無しさん
垢版 |
2022/12/31(土) 19:31:20.58ID:m5ypMvwu
>>453
本人乙
2022/12/31(土) 20:34:07.35ID:SXpoq9wQ
Pythonの宿題が出る学校なんてあるのか
2022/12/31(土) 21:04:33.03ID:YncayN1e
>>455
この手の学校みたいなのがたくさんありそう
https://www.fukuyama-u.ac.jp/blog/10855/
2023/01/01(日) 12:43:32.04ID:UnctZ8I+
chatGPTに聞けば瞬時解決
2023/01/02(月) 17:30:43.73ID:9+dRXyIF
JSONRPCのAPIを実行して返ってきたjsonをdictで返す関数がある
APIから返ってくるjsonの中身は、実行するAPIのメソッドによって変わる
この場合関数の返り値のタイプヒントはどう書けばええんやろか
2023/01/02(月) 19:50:55.64ID:YI944atq
API毎に関数作ればいいんじゃ
460デフォルトの名無しさん
垢版 |
2023/01/04(水) 01:08:55.22ID:O+gUhHpW
30代Pythonクソチョン男は強姦魔の犯罪者!
あなたの近くにいます!
父母と祖父母の戸籍謄本を提出させましょう!
2023/01/04(水) 20:02:20.16ID:Rrqo9EoM
ほんとにこのレベルで質問していいのか恐縮なんだが助力願いたい

・前提(実行環境:Win10-64bit, Python3.11)
GUI.py
 「選択」「開始」「停止」ボタンを持つGUIを出す
 他のpyファイルを実行する関数pyexecを持つ
script1.py なんかの処理をするやつその1。基本whileTrueしてる
script2.py なんかの処理をするやつその2。同上
parts.py script*.py共通のfrom import *用モジュール
があるとき、

GUI.pyでGUIを開き、そこで「選択」ボタン(filebrowse)からscript*.pyを選択
選択したモジュールを「開始」ボタンで並列実行開始し(ここで開始ボタンは無効化)、
その並列実行を「停止」ボタンでいつでも強制終了できる(ここで開始ボタンが復帰)
さらに「選択」ボタンからファイルを選び直し、再度「開始」ボタンから並列実行を開始できる
という風に動作させたい

script*.pyでimportするものは(partsを含む複数が)共通なので、importはGUI.pyの一度で済ませたいが、
GUI.pyで
 from parts import *
 th = threading.Thread(pyexec("script1"), daemon=True)
 th.start()
としたとき、parts.pyで定義した関数がth上では未定義になっていた

・質問
Threadする度にimportすべきかどうか
あるいは全体的にもっと効率のよい方法がないか
462デフォルトの名無しさん
垢版 |
2023/01/04(水) 20:58:02.38ID:3yoX2IMb
まず、cpythonのmultithreadは本当に腐っているのでmultiprocessingかasyncio で書き換えましょう
2023/01/04(水) 21:19:50.21ID:Rrqo9EoM
マジ?threadがダメだからthreadingにしろってのは見たけどそれもダメなのか
multiprocessingは一回試したんだけど、呼び出した時にGUIが増殖したからなんかダメそうなんだよな……
asyncioっての調べてみるわ
2023/01/04(水) 22:31:04.17ID:Rrqo9EoM
ありがとう、プロセスプールとかいうのの存在も知れてよかった

でもダメだ、どのみち呼び出し先にimportが引き継がれてなかった
やっぱ呼び出すつどimportするしかないのか……?
2023/01/04(水) 22:41:59.87ID:p76DNoW9
別プロセスとして起動するなら必須じゃない?
モジュール変数を共有するなら、from~じゃなくて
import parts
parts.val1=1
って感じにすれば共有できる
その場合はgui.pyからscript1をimportして、threadingにtarget=script1.main()を指定する必要がある
exec関数使えば動的にインポート可能かな
2023/01/04(水) 23:44:16.96ID:Rrqo9EoM
なるほど、script1にpartsをimportするんじゃなく、GUIにscript1をインポートするのか
確かにそれならGUI上で定義した変数やら関数をscript1側でそのまま使えるな
最後に読み込んだpyファイル名を覚えておけば複数ファイル読み込んでも実行対象迷わないし
そのアプローチでやってみる。ありがとう

exec関数……そんな便利なもんあったのか……
2023/01/05(木) 01:38:12.65ID:Tyh0/h05
どういうわけかインポートができない ググった通りにやってるんだが……
中身の実行自体はされてるらしく、print文とか入れとくとそれは実行される
だがモジュール名を覚えてくれない

import importlib.util
import os
import gomi as g
g.MODULE_PATH = r"C:\Users\gomi\Downloads\test.py"
g.MODULE_NAME = os.path.splitext(os.path.basename(g.MODULE_PATH))[0]
spec = importlib.util.spec_from_file_location(g.MODULE_NAME, g.MODULE_PATH)
modulevar = importlib.util.module_from_spec(spec)
spec.loader.exec_module(modulevar)
exec(g.MODULE_NAME + ".main()")

Traceback (most recent call last):
File "C:\Users\gomi\Downloads\gomi.py", line 9, in <module>
exec(g.MODULE_NAME + ".main()")
File "<string>", line 1, in <module>
NameError: name 'test' is not defined
2023/01/05(木) 10:48:13.00ID:6RwFdPYm
import threading
import sys
sys.path.append('C:\\Users\\gomi\\Downloads')
exec("import gomi")
exec("th1 = threading.Thread(target = gomi.main)")
exec("th1.start()")

これなら動くよ
469デフォルトの名無しさん
垢版 |
2023/01/05(木) 10:58:48.59ID:Cbg+aaE9
何で毎回importするのが嫌なの?死ぬの?
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況