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

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

新規登録して質問してみよう
ただいま回答率
85.34%
Python 3.x

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

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Q&A

解決済

2回答

448閲覧

mx-linuxでpythonを実行して処理過程をIDLEなどで表示させたい

lotoemon

総合スコア15

Python 3.x

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

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

0グッド

0クリップ

投稿2024/12/01 17:29

編集2024/12/13 16:27

実現したいこと

windows10でpythonを実行するとpowerShellの画面のようなblackスクリーンが出現し、
複数のpyファイルの実行過程が終了時まで継続して表示されますが、
Linuxではその画面が出現せず、途中過程がわからず、正常に実行されているか不安です。
windowsの場合のような画面に表示したいのですが、どのようにしたら良いのでしょうか?

発生している問題・分からないこと

pyファイル単体ならIDLEでファイルを開き
Run ⇒Run module
で進行過程が把握できますが、複数ファイルとなると表示されません

該当のソースコード

#------------------------------------------------------- # フォルダの上の階層を検出する (pyPackの下層に保存してます) | #------------------------------------------------------- def TargetPath(path,key): cnt = 0 try: int(key) if key == 0: path = os.path.basename(path) elif key > 0: while cnt < key: cnt+= 1 path = os.path.dirname(path) if path == '/': result = 'error' else: result = path except ValueError: while cnt < 15: cnt+= 1 result = os.path.basename(path) if result == key: result = path break else: path = os.path.dirname(path) result = 'error' return result #------------------------------------------------------- # より詳細なsample.py | #------------------------------------------------------- import os import sys # pyPackフォルダ(モジュール群)を読みにいっています sys.path.append(os.path.join(os.path.dirname(__file__), '../../../../pyCode')) import pyPack import time import datetime import glob import shutil import subprocess import tkinter as tk title = 'sample' scnd = 2 xLen = 60 # モジュールを呼出してpopUpメニューを表示 pyPack.modu.PopUp(scnd,'Start To '+title,250,70) # モジュールを呼出してフルパスを取得する # Windowsの場合 C:/○○/pyBOO # linuxの場合  /home/ユーザー名/○○/pyBOO # ここが問題の絶対パスを作成するモジュールです rtDir = pyPack.modu2.TargetPath(os.getcwd(),'pyBOO') # 現在のコードの在るパス here = rtDir +'/pyCode/cMarket/FX/USDJPY' # モジュールを呼出して、処理結果を格納するパス(文字列のみ)の作成 there = pyPack.modu2.IsThere(here) # モジュールを呼出して、thereのフォルダを作成する pyPack.modu2.DirMaker(there) # 何かしらの処理をして'there'に格納する #---- モジュールを呼出し、osがWindowsの場合の処理 if pyPack.modu2.HowOS(1) == 'windows': # rtDir = C:/share/pyBOO print(rtDir) # there = C:/share/pyBOO/pyData/dMarket/FX/USDJPY print(there) # paramikoにてLinuxサーバーへファイル転送する処理 #---- モジュールを呼出し、osがLinuxの場合の処理 elif pyPack.modu2.HowOS(1) == 'linux': # rtDir = '/home/ユーザー名/share/pyBOO' print(rtDir) # there = '/home/ユーザー名/share/pyBOO/pyData/dMarket/FX/USDJPY' print(there) # smbClientにてLinuxサーバーへファイル転送する処理 # Windowsは'python' Linuxは'python3'と出力 pyType = pyPack.modu2.HowOS(3) #---- 次のnext.pyの処理へ (ここがTerminalでエラーになる元凶です) #---- 絶対パスを指定すればTerminalでも実行できました nPath = here+'/subDir/next.py' subprocess.Popen([pyType,nPath]) # モジュールを呼出してpopUpメニューを表示 print('\n[終了]',title,'\n') pyPack.modu.PopUp(scnd,title+' Closing',250,70)

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

mx-linuxのTerminalで

$ python3 /home/test/samle.py

と実行すとそのファイルのみ実行し、表示できますが、
メニュー画面をtkinterで作成して次のファイルを実行すると
python3: can't open file '/home/test/next.py: [Errno 2] No such file or directory
となります。

補足

特になし

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

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

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

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

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

otn

2024/12/02 12:50

> $ python3 /home/test/samle.py が普通のPythonスクリプトの実行の仕方ですね。 > can't open file '/home/test/next.py: [Errno 2] No such file or directory は、単にファイルの指定(ファイルの名前とか場所とか)を間違っているだけでしょう。 相対パス指定での場所の間違いは、「カレントディレクトリーとは何か?」を理解していない人がはまるポイントのようですが、理解していますか?
lotoemon

2024/12/02 18:07

otn様 ご連絡ありがとうございます。ご指摘の内容でピンときたかもしれません。 これは私の作成したコードが不完全だったのかもしれません。 前回は理解し易くするため、かなり大雑把に説明になってしまいました。 もう少し詳細をご説明いたします。 そもそも、pythonコードの書かれたファイルやフォルダー群(ひと塊)を自由に移動できるように 絶対パスを検索するモジュールを作成していました #------------------------------------------------------- # フォルダの上の階層を検出する  | #------------------------------------------------------- def TargetPath(path,key): cnt = 0 try: int(key) if key == 0: path = os.path.basename(path) elif key > 0: while cnt < key: cnt+= 1 path = os.path.dirname(path) if path == '/': result = 'error' else: result = path except ValueError: while cnt < 15: cnt+= 1 result = os.path.basename(path) if result == key: result = path break else: path = os.path.dirname(path) result = 'error' return result #------------------------------------------------------- /home/user名/share/test/samle.py /home/user名/share/test/subDir/next.py P.s. "share"はsambaで共有フォルダとして開放しています #----- sample.pyの記述の抜粋 ----- tarDir = package.TargetPath(os.getcwd(),'test') nPath = tarDir+'/subDir/next.py' subprocess.Popen(['python3',nPath]) # ---- Windows10やmx-Linuxでは samle.pyをクリックやIDLEでRun ⇒ Run moduleでは問題なく動いています (samle.pynext.py) しかし、Terminalで実行すると python3: can't open file '/home/user名/error/test/subDir/next.py': [Errno 2] No such file or directory となり、"share" がerrorに置き換わってしまってます。 "TargetPath"が災いしてTerminalではパスが正確に反映されないのかもしれません だとすると、数十ファイルが"TargetPath"で記述されているので変更ができません 現状ではvbsなどでよく見かけるpopupメニューのようなものを自作してLinux版では 実行過程の節目ごとに表示させているのですが、より詳細なプロセスを表示したかったのです 改めて絶対パスを固定化した、よりシンプルなコードで試してみて それでもうまく行かなかったら、再度、ご相談させて頂きます 今後ともよろしくお願いいたします。
otn

2024/12/03 15:00

インデントの無いPythonプログラムは読めないので、読んでませんが、 > 「カレントディレクトリーとは何か?」理解していますか? という問いに対しては、「理解していません」という回答ということですかね? であれば、下記の二択です。 ・「カレントディレクトリーとは何か?」を理解した上で相対パスを使う ・ファイルの指定で相対パスを一切使わず、すべて絶対パスだけ使う
lotoemon

2024/12/10 15:45

otn様 ご連絡遅くなりすみません ファイルをより単純化し、パスを絶対パスに置き換えて試したところ Terminalでも問題なく動きました。 しかし、前述の通り def TargetPath(path,key): で記述したファイルが100以上あり 変更ができませんのでTerminalでの実行は 諦めざるおえません。別の方法を探してみます。 いずれにしましたも、ありがとうございました。 また、 >インデントの無いPythonプログラムは読めないので、読んでませんが、 すみません。こちらとしてはインデントを付けていたのですが、投稿したら 無くなっていました。 今後、投稿の仕方を工夫してみます 色々、わからないことだらけですので今後ともよろしくお願いいたします
otn

2024/12/11 13:27

> 今後、投稿の仕方を工夫してみます 工夫というか、このページの下部に「ヘルプ」というリンクがあり、その飛先ページに「質問する時のヒント」というのがあるので、そこに使い方(=質問の仕方)が全部書いてあります。 それを全部読で理解するだけでOK。 > しかし、前述の通り > def TargetPath(path,key): > で記述したファイルが100以上あり 前述の通りと言われても、「TargetPath??何のこと??」状態です。 > で記述したファイルが100以上あり > 変更ができませんのでTerminalでの実行は諦めざるおえません。別の方法を探してみます なぜ100以上あると変更できないのかも、「何故??」状態ですね。 変更すればうまく行くと思っているなら変更すれば良いのでは?
lotoemon

2024/12/12 17:52

otn様、ご連絡ありがとうございます 本業が深夜になるため、ご返事が遅くなりがちですみません。 また、今回は少し長文になりますが、ご容赦ください。 ご指摘のヘルプを参照しました。 今後はもう少し正確に情報をお伝えできるよう努めていきます。 [otn 2024/12/11 22:27] >> しかし、前述の通り >> def TargetPath(path,key): >> で記述したファイルが100以上あり >前述の通りと言われても、「TargetPath??何のこと??」状態です。 (途中省略) >なぜ100以上あると変更できないのかも、「何故??」状態ですね。 >変更すればうまく行くと思っているなら変更すれば良いのでは? 上記については下記日付で私がコメント欄に記入したコードのことで [lotoemon 2024/12/03 03:07] otn様がコメントくださった。[otn 2024/12/04 00:00] >インデントの無いPythonプログラムは読めないので、読んでませんが、 に該当します。改めて質問欄を編集しコード記入欄に記述しています 元々はWindowsマシン複数台+vbs+mql(MetaTrader)で FXやCFDの自動売買システムを構築していましたが Windowsの使用を中止する方向でpythonを学びlinuxへ移行の途中段階です pythonのおかげでスクレイピングが簡単になりましたし、 X(旧Twitter)やTelegramのAPIも利用が可能になりました 現在は下記①の状況ですが順次②、最終的には③にするつもりです ①[サーバー:Windows10] + [クライアント:mxLinux + windows10] ②[サーバー:mxLinux] + [クライアント:mxlinux + windows10] ③[サーバー:mxLinux] + [クライアント:mxlinux] 現在、WindowsまたはLinuxで書いたコード(pyファイル)をどちらのOSに (pc内の場所を選ばずに)コピーしても問題なく動くように def TargetPath(path,key): で絶対パスを検出するモジュールを作りました >なぜ100以上あると変更できないのかも、「何故??」状態ですね。 >変更すればうまく行くと思っているなら変更すれば良いのでは? につきましては、本来ならLinuxでもpython IDLEがWindowsと同じようなら問題ないのです 色々調べていましたら、海外のサイトで私と同じことを質問している方がいましたが 明確な回答は出ていないようでした。 (Terminal以外では問題なく動作し日々のルーティーンには影響しないので) 落ち着いたら改めて行いたいのです 現在、急務な問題が有り、上記②に取り掛かっていますが、 サーバーがWindowsからLinuxに変更されるとファイル転送の方法が 今までとは異なりますので、こちらを先に解決しないとならないのです ①ではLinux側でsmbClientでコードを記述すればOKでしたが(2年前にotn様に教わりました) ②では更にWindows側で'paramiko'などを使ったコードが必要らしいので そこをこれから勉強しないとならないです 更にWindowsではFileMakeProをデータベースとして使ってましたが LinuxのWineではFileMakeが動くマシンとそうでない場合があり 動作が不安定のため、仕方なくApache+php+mySQLでRDBを作成する予定です このように問題山積です これからもotn様をはじめ多くの方のお力をお借りしないと前に進めないので ど素人でIT用語もや知識もままならない私(lotoemon)ですが 今後とも、どうぞ宜しくお願い申しあげます。
lotoemon

2024/12/13 16:27

oth様、teamikl様 ご連絡ありがとうございます。こんなに親身に教えて頂き、感無量です。 まずはotn様のご指摘のあった下記モジュールの使い方ですが 自分の頭で理解しているだけで説明が不足していますね、すみません。 >def TargetPath(path,key): >で記述したファイルが100以上あり 100以上とはsamle.pyのようなpythonファイルが複数のフォルダでかなりの階層があり pythonファイルが100個以上あるので、うかつに変更すると不具合が起きたら修復が 大変になるという意味でした また、sample.pyをより具体的にコードと def TargetPath(path,key): の使用例を上記質問欄のコード記入欄に載せておきます また、teamikl様のご指摘の内容が今回の質問の正に答えだと思います 私の知識が浅いため、どのようにたら良いのか考えが及びません たぶん、偶然にもご指摘のコードに近いものを実際のsample.pyには記載しているみたいです 私には判断がつきませんのでsample.pyの実際のコードをより記述したものを 上記質問欄のコード記入欄に載せておきます ご精査頂ければ幸いです。 sample.pyをなぜ、このような建付けをしたかというとコード記入欄の文中に出てくる[pyBOO]が 私の自作システムの親(root)になります。その直下に2つのフォルダが有ります ①pyCodeフォルダ -直下に- ③cMarketフォルダと④pyPackフォルダ(共通で使うモジュールを入れておく場所) ②pyDataフォルダ -直下に- ⑤dMarketフォルダ ①pyCodeフォルダの下層にあるpythonファイルの処理で得られたデータを ②pyDataフォルダの同じ下層のフォルダ(デイレクトリ)に無条件で格納できるようにモジュールを作り対応させてます 下記の例ではパスの名前が異なるのは[cMarket]と[dMarket]だけなのでモジュールでコードのパスとデータ格納パス を簡単に切り分けできる仕組みにしています 例) [pyBOO] - [pyPack] - [modu] - モジュール.py [pyBOO] - [cMarket] - [FX] - [USDJPY] - usdjpy.py [pyBOO] - [dMarket] - [FX] - [USDJPY] - usdjpyのデータ 上記コード記述欄に表記した import sys sys.path.append(os.path.join(os.path.dirname(__file__), '../../../../pyCode')) import pyPack はmyPackフォルダ(モジュール群)を読みにいっています def TargetPath(path,key): はpyPackの下層に位置しています oth様、teamikl様 大変恐縮ですが、もう少しお付き合いいただけませんでしょうか? 前回までは'この件'は後回しにしようと思っておりましたが、 皆様のご親切であと少しのところまで来た気がします 私もここは踏ん張って解決したいです。 私のsample.pyのコードを見て頂いて、何かアドバイスを改めて頂きたいのです 宜しくお願い致します
teamikl

2024/12/13 17:52

自分の回答より引用、ファイルの末尾を見た感じここ該当しそうかな > コメント内に Popen が見えたので、もし Popen で実行してるのでしたら、 > 適切な cwd 引数を設定することで解消できるかもしれません。(試せないので推測) rtDir = pyPack.modu2.TargetPath(os.path.dirname(__file__),'pyBOO') # もしくは、回答に書いたように、事前に chdir Popen に cwd オプションがあるので、以下を試してみてください。 subprocess.Popen([pyType,nPath], cwd=os.dirname(nPath)) 環境依存な情報が多いので、他の人の環境ではコードを試して実行が出来ません。 (前半部分のコードは読んでません、質問で提示されてる以外の情報が不足していて読めません) なので、〇〇を試して、みたいな提案しかできませんが、こういったやり取りは「質問する時のヒント」を参照。 出来れば、質問用にファイル2つくらいのシンプルな構成のプロジェクトを作って ファイルA から ファイルB を Popen で実行したい、みたいに問題点を絞ってから質問すると良いです。 第三者がコードを実行して問題の現象を再現できる、事が重要です。 あと、IDLEの仕様に関して IDLEでは初心者はダブルクリックで実行するから、 その時と同じ挙動の方が親切だよねという配慮らしいのですが、(不具合ではなく意図された挙動) 実行するファイルに chdir する IDLE の仕様は公式文書には記載されてない情報だったり これが問題になるなら、そろそろ他の IDE を検討してみても良いのではと思います。 IDLEを使い続ける場合は、挙動を理解して使いましょう。 具体的には、コードから getcwd に依存する箇所を全部追いだす実装にしないと 他環境で問題になる可能性があります。 根本的な解決策としては、プログラム群のパッケージ化をお勧めします。 パッケージ化までできると環境にインストールすればよくなるので、 プラットフォーム間での path の違いなども解消できるはずです。 モジュールの探索等は自前の処理よりも python 側の仕組みに頼った方が楽出来ます。
lotoemon

2024/12/13 17:54

teamikl様 本日、私がコメントを追記した後、もう一度、teamikl様のコメントを読み返しましたら そこに、答えがありました。 os.chdir(os.dirname(__file__)) を追加するだけでOKでした。 大変ありがとうございました。 これからもどうぞ宜しくお願いします
guest

回答2

0

ベストアンサー

コメントの情報は全部追いきれてませんが、IDLEの情報です。IDLE特有のハマりポイントもあるので

IDLE で実行した時の挙動

IDLE での実行(Run Module)では通常の実行とは異なり、主に簡易デバッグ用途なので、
挙動が異なる場合があります。具体的には 実行前に対象のファイルの場所に chdir してます
該当箇所: idlelib ソースコード run_module_event 内
https://github.com/python/cpython/blob/3.13/Lib/idlelib/runscript.py#L159

確認方法: ターミナルとIDLEでそれぞれ、ファイルを置いた場所以外から実行すると確認できます。

python

1import os 2print(os.getcwd())

samle.pyをクリックやIDLEでRun ⇒ Run moduleでは問題なく動いています

とも状況が一致します。

残念ながら、IDLE 側の設定では起動する作業ディレクトリの指定はできません ⇒ 他の IDE を使おう。

追記: このchdirする仕様は、他にimport するファイルがある時でも、
ライブラリの読込パスの設定等をしなくても実行できるようにとの、初心者向けの親切設計。らしい

  • pyファイル単体ならIDLEでファイルを開きRun ⇒Run module
    で進行過程が把握できますが、複数ファイルとなると表示されません

  • メニュー画面をtkinterで作成して次のファイルを実行すると ...エラー

複数ファイルとなると表示されないについては、どのように実行されてるのか解らない為情報不足です。

コメント内に Popen が見えたので、もし Popen で実行してるのでしたら、
適切な cwd 引数を設定することで解消できるかもしれません。(試せないので推測)

解決策

あまりお勧めではない解決策としては、とりあえず何とか動かしたい場合の一時的な回避策、
起動時にファイルの場所に chdir することで IDLE での実行と同じ状況にできるはずです。(未テスト)

python

1import os 2os.chdir(os.dirname(__file__))

根本的な解決策は、TargetPath 関数とその使い方(cwdを渡している)をなんとかした方が良いと思います。
どの様に使われてるのかを把握してないので、実装のヒントのみですが

  • pathlib を使おう
  • __file__ で.pyファイルの場所は所得出来ます。(※ 但し exe化する場合は工夫が必要)
  • Python のモジュールやパッケージ化の仕組みを使うと path の諸問題は解決できるはず

問題の症状について

例えば、このように ターミナルで /home/xxx/yyy から実行したとしましょう

sh

1/home/xxx/yyy> python3 /home/test/samle.py

このとき os.getcwd は /home/xxx/yyy で TaregtPath で探索される場所に 目的のファイルがないと
TargetPath はエラーとして 'error' という文字列を返し、想定外の path にアクセスしようとして件のエラーとなります。

IDLEでの実行では、IDEL内の shell で os.getcwd() で確認した場所に拘わらず、
Run Module で実行したときの cwd は ファイルの場所 上記の場合 /home/test になります。

TargetPathに os.getcwd() を渡すというのは、IDLEの実装に依存した仕様になってしまってるので、
その辺りを見直すと良いでしょう。

投稿2024/12/12 23:01

編集2024/12/12 23:32
teamikl

総合スコア8791

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

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

lotoemon

2024/12/13 17:48

本日、私がコメントを追記した後、もう一度、teamikl様のコメントを読み返しましたら そこに、答えがありました。 os.chdir(os.dirname(__file__)) を追加するだけでOKでした。 Treminalでも問題なく動きました 大変ありがとうございました。 これからもどうぞ宜しくお願いします
lotoemon

2024/12/13 17:49

回答ありがとうございます。 試したところ問題が解決しました! ベストアンサーに選ばせていただきました。
teamikl

2024/12/13 17:58

すれ違いで解決してた。 心当たりのある挙動だったので推測だったけど、解決して良かったです。が chdir の解決策は、IDLE の仕様に依存したコード向けの一時的な回避策なので、 他の処理で影響・不都合が出るかもしれない点には注意してください。 考えられる影響: ファイルを保存していたが別の場所へ保存されるようになった、等
teamikl

2024/12/13 18:11

追記: chdir で解決できたのなら、 TargetPath へ os.path.dirname(__file__) を渡す解決策の方がよいです。 影響範囲が chdir よりも限定的なので、他で問題になる可能性が chdir よりは 少なくなります。
lotoemon

2024/12/13 18:22

teamikl様 早速のコメントを頂いていたと気が付かずにすみません。 再再度の追記後に気が付きました >環境依存な情報が多いので、他の人の環境ではコードを試して実行が出来ません。 >(前半部分のコードは読んでません、質問で提示されてる以外の情報が不足していて読めません) >なので、〇〇を試して、みたいな提案しかできませんが、こういったやり取りは「質問する時のヒント」を参照。 ご親切ありがとうございます。今後は用法をよく確認してから質問します >出来れば、質問用にファイル2つくらいのシンプルな構成のプロジェクトを作って >ファイルA から ファイルB を Popen で実行したい、みたいに問題点を絞ってから質問すると良いです。 >第三者がコードを実行して問題の現象を再現できる、事が重要です。 アドバイスありがとうございます。今後は、その点も注意して質問をしていきます >あと、IDLEの仕様に関して >IDLEでは初心者はダブルクリックで実行するから、 >その時と同じ挙動の方が親切だよねという配慮らしいのですが、(不具合ではなく意図された挙動) >実行するファイルに chdir する IDLE の仕様は公式文書には記載されてない情報だったり >これが問題になるなら、そろそろ他の IDE を検討してみても良いのではと思います。 何かよいものを探してみます。今後、PHPのコードも作成する予定ですので できれば両方で使えるIDEを探してみます >IDLEを使い続ける場合は、挙動を理解して使いましょう。 >具体的には、コードから getcwd に依存する箇所を全部追いだす実装にしないと >他環境で問題になる可能性があります。 かなりの量なので、時間をかけて少しずつファイルに修正をしていきます >根本的な解決策としては、プログラム群のパッケージ化をお勧めします。 >パッケージ化までできると環境にインストールすればよくなるので、 >プラットフォーム間での path の違いなども解消できるはずです。 >モジュールの探索等は自前の処理よりも python 側の仕組みに頼った方が楽出来ます。 了解いたしました。 'プログラム群のパッケージ化'がよく理解できていませんので後ほどネットで調べてみます #----- 今回の件、ものすごく的確で大変参考になりました。 最後の最後まで親切にめんどうを見て頂き、大変感謝しています ありがとうございました。
lotoemon

2024/12/16 15:02

Goodをもっと多く送りたいのですが うまくいきません。すみませn。
guest

0

コメントだと読みにくいので、回答に書きますね。

まず、

「カレントディレクトリーとは何か?」理解していますか?

という問いに対しては、「理解していません」という回答ということですかね?
であれば、下記の二択です。
・「カレントディレクトリーとは何か?」を理解した上で相対パスを使う
・ファイルの指定で相対パスを一切使わず、すべて絶対パスだけ使う

というコメントに対しては、
・「カレントディレクトリーとは何か?」を理解した上で相対パスを使う
は、諦めて、
・ファイルの指定で相対パスを一切使わず、すべて絶対パスだけ使う
の方を選択したと言うことなのでしょうか?

上記については下記日付で私がコメント欄に記入したコードのことで

は、「読めないコードを読んだ前提の記述なんだろうな」という想像は付いていました。

関数TargetPathを定義しているコードは読めるようになりましたが、

def TargetPath(path,key):
で記述したファイルが100以上あり

が分からないのはそのままです。ファイルとは??この関数との関係は??
依然として「読めないコードを読んだ前提」なのでしょうか?

また、関数は定義しただけではだめで、呼び出さないt実行されません。
呼び出し側のコードも含めた全体を提示しましょう。

def TargetPath(path,key):
で絶対パスを検出するモジュールを作りました

これも意味が分かりません。
(1) TargetPathという関数は、どういう動作を期待して書いた物でしょうか?
どういう引数を与えて、どういう結果を得たいのか?
(2) その関数は期待通りに動いているのでしょうか?意図しない結果を返すのでしょうか?
後者の場合は、具体的に「これこれの引数で、これこれを返すと期待したが、実際にはこれが返る」という風に。

なぜ100以上あると変更できないのかも、「何故??」状態ですね。
変更すればうまく行くと思っているなら変更すれば良いのでは?

というのはどうなのでしょう?
「絶対パスに変更すればうまく行くと思っている」はYES or NO?
YESの場合は、絶対パスに変更しない理由は何ですか?

(Terminal以外では問題なく動作し日々のルーティーンには影響しないので)
落ち着いたら改めて行いたいのです

も意味が分かりません。
「今別件で忙しいので、この質問を解決しようとするのは一旦中断する」ということなんでしょうか?

最初のコメントに書いた事に戻りますが、

$ python3 /home/test/samle.py

が普通のPythonスクリプトの実行の仕方ですね。

です。
それ以外の方法で実行するなら、Pythonの理解だけでなく、その実行に使うツールを熟知している必要があります。
teamiklさんも、「IDLE特有のハマりポイントもあるので」とお書きのように、
IDLEを使うなら、「IDLEとは何なのか・どのようにコードを実行するのか」などを知っている必要があります。
正解はないので、どれでも好きな実行方法でOKです。事前に勉強する範囲が広いか狭いかだけの違い。

投稿2024/12/13 13:06

otn

総合スコア85989

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

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

otn

2024/12/14 11:20

最終的には、 ・「カレントディレクトリーとは何か?」を理解した上で相対パスを使う の方を選択されたと言うことのようですね。 普通は、1つ目に書いた「「カレントディレクトリーとは何か?を理解した上で」が良い解決方法です。 「何かよくわからないけど os.chdir(os.dirname(__file__)) を書いておけば良いらしい」では駄目ですが。 2つめの ・ファイルの指定で相対パスを一切使わず、すべて絶対パスだけ使う は、「今すぐ目の前の問題を解決する必要があり、その前に学ぶ時間が取れない」とか「新しく知識を増やすのはいやだ」のような特殊なケースですかね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.34%

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

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

質問する

関連した質問