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

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

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

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

Python

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

Q&A

解決済

1回答

4469閲覧

Pythonでドラッグアンドドロップ実行が出来ない

退会済みユーザー

退会済みユーザー

総合スコア0

Python 3.x

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

Python

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

0グッド

0クリップ

投稿2023/03/03 09:12

発生している問題

Python 3.10.2→3.11.2へバージョンアップした後、以下の2点が機能しなくなりました。

  • .pyファイルへのドラッグアンドドロップ実行
  • コマンドライン引数を sys.argv で取得

バージョンアップの詳細

インストーラ(python-3.10.2-amd64.exe)によりインストールしたPython環境ではコマンドライン引数渡し、D&Dともに正常に機能していました。
その後scoopを導入した為、既存のPythonをアンインストール→今回scoop経由で最新版のPython 3.11.2を導入したところ、この問題が発生しました。

コマンドライン引数のテスト

Python

1# argv_test.py 2import sys 3print(sys.argv)

Powershell

1PS> ./argv_test.py a b c 2['C:\\Users\\ユーザ\\test\\argv_test.py'] 3(別窓が立ち上がる) 4 5PS> python ./argv_test.py a b c 6['.\\argv_test.py', 'a', 'b', 'c'] 7(PowerShellウインドウ内に表示)

上記結果より、やはり関連付けの問題でしょうか?

試したこと

  • .py拡張子の関連付けをpython.exeからpy.exeに変更
  • scoop版Pythonのアンインストール→インストーラ版Python(python-3.11.1-amd64.exe)のインストール
  • インストーラ版Python(python-3.10.2-amd64.exe)のインストール

いずれも問題の解決には至りませんでした。

また、検索結果も以下に記載します。

実行環境

  • Windows 10 Pro 22H2
  • PowerShell 7.3.3
  • scoop v0.3.1
  • Python 3.11.2

また、上記事項について、更に必要な情報などありましたらご指摘ください。

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

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

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

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

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

Daregada

2023/03/03 09:50

テスト用のプログラムの末尾に「input()」を追加して、キー入力待ちの状態にすれば、別ウィンドウで開いた内容を確認できます。おそらく、ちゃんとコマンドライン引数が表示されているのでは?
退会済みユーザー

退会済みユーザー

2023/03/04 02:08

仰る通り、実際には出力の確認の為、最後に input() を記述したスクリプトを走らせていました。 (端折ってしまっていてすみません) 質問文の通り、 PS> ./argv_test.py a b c の実行結果と PS> python ./argv_test.py a b c の実行結果とで異なった為、 首をかしげていたところでした。
Daregada

2023/03/04 05:48

「実行結果で異なった」とは、 ・./argv_test.pyを実行すると「別ウィンドウに結果が表示される」ことなのか、 ・./argv_test.pyを実行すると、別ウィンドウに「コマンドライン引数が表示されない」ことなのか、 どちらを意味していますか?
退会済みユーザー

退会済みユーザー

2023/03/04 06:15 編集

「コマンドライン引数のテスト」のPowerShell実行結果 2行目と6行目に記載した通り、print(sys.argv) に対する出力結果が異なる事を意味しています。 2行目の結果は配列に引数が含まれていません。 この為、ファイルの関連付けによる問題が、D&D実行できない原因となっているのではないか?と推測していました。
Daregada

2023/03/04 06:42 編集

その2行目の結果を、「別に開くウィンドウのほうにコマンドライン引数が表示されているのでは? input()で一時停止して別ウィンドウの内容を確認してください」と言っています。こちらの環境では、別ウィンドウにargv[0]とコマンドライン引数が表示されているので。
退会済みユーザー

退会済みユーザー

2023/03/04 07:08

本日11:08の返信にも書きましたが、実際にはinput()を含むスクリプトを実行しています。 実行結果については質問文の通りです。
Daregada

2023/03/04 07:19 編集

2行目の内容は、別ウィンドウに表示されているものということですね。 別の回答者の人が書かれている設定を行なってから、新たに開いたPowerShellのウィンドウで実行して結果を確認してください。
退会済みユーザー

退会済みユーザー

2023/03/04 07:19

記載方法が分かりにくい点、失礼しました。 別窓が立ち上がり、そこに表示された内容が2行目 元のウインドウ内に表示された内容が6行目 という意味です。
退会済みユーザー

退会済みユーザー

2023/03/04 07:21

bsdfan様から頂いた対応方法を実行しましたが、 2023/03/04 13:04 に返信した通り、 未だ解決には至っていません。
Daregada

2023/03/04 07:24

いえいえ。それでPowerShellからの実行でコマンドライン引数が得られる状態なら、あとはレジストリのDropHandlerに正しい値を設定するだけです。あなたが参考にしたブログの値は、おそらくあなたの使っているWindowsでは正しい値ではありません。手元のWindowsでは違う値でした。
退会済みユーザー

退会済みユーザー

2023/03/04 07:58

「右クリック→プログラムから開く」の関連付けをリセット後、 cmd(管理者権限)でassoc, ftypeコマンドによる再設定、OS再起動 を行った結果、無事問題を解決する事ができました。 また、ご指摘の通り、上記ブログによるDropHandlerのレジストリ追加は、私の環境では正しい値ではないようでした。 色々とご返信下さり、ありがとうございました。
guest

回答1

0

ベストアンサー

コマンドプロンプトで、assoc, ftypeコマンドを使って設定します。
管理者権限が必要です。

1. .py ファイルのファイルタイプを確認

> assoc .py .py=Python.File

環境によってはPython.Fileではなく他の文字列の場合があると思いますが、その場合は以下もそれに合わせて修正してください

1'. assocで見つからない場合は、新しくファイルタイプを紐付けします。

> assoc .py=Python.File

2. ファイルタイプの関連付けを確認

> ftype Python.File Python.File="C:\.........\python.exe" "%L"

3. ファイルタイプの関連付けを修正

> ftype Python.File="C:\........\python.exe" "%L" %*

大事なのは 3. の %*です。これで引数を受け取れるようになります。

こちらとかが参考になると思います。
https://cartman0.hatenablog.com/entry/2016/04/11/153733
https://qiita.com/TsuneoNakanishi/items/5f0248c82bf073cf2868

投稿2023/03/03 11:00

編集2023/03/04 04:40
bsdfan

総合スコア4899

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

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

退会済みユーザー

退会済みユーザー

2023/03/04 04:04

ご回答ありがとうございます。 以下に実行結果を記載します。 >assoc .py 拡張子 .py のファイルの関連付けが見つかりません >ftype Python.File ファイル タイプ 'Python.File' が見つからないか、オープン コマンドが関連付けられていません。 >ftype Python.File="C:\scoop\apps\python\current\python.exe" "%L" %* Python.File="C:\scoop\apps\python\current\python.exe" "%L" %* >ftype Python.File Python.File="C:\scoop\apps\python\current\python.exe" "%L" %* >assoc .py=Python.File .py=Python.File >assoc .py .py=Python.File 上記の通りコマンド プロンプト (管理者権限)で実行しました。 しかし残念ながら、D&D実行できない問題は解決しませんでした。 また、新たな疑問として、 (A) ファイル右クリック→「プログラムから開く」→「別のプログラムを選択」による関連付け (B) "assoc" "ftype"コマンドでの関連付け 上記2つの指定方法は、それぞれ連動していないのでしょうか? 試しに、 (A)により.pyファイルをテキストエディタに関連付けした後、 (B)によりpython.exeに関連付けを実行したところ、 ダブルクリックして開かれるのはテキストエディタのままです。 ファイル拡張子の関連付けの関係をもう少し調べてみようと思います。
bsdfan

2023/03/04 04:44

そういう状況はよくわからないですね。 質問のところに書かれている、レジストリをいじったのとかが、悪影響出てないかが気になります。
退会済みユーザー

退会済みユーザー

2023/03/04 08:05

以下の様に関連付けをリセットして、もう一度試してみたところ、無事解決出来ました。 この度はありがとうございました。 (焦ってしまいリセット、再起動を怠っていた事が原因でしょうか) 1. 右クリック→プログラムから開く の関連付けをリセット ( https://tanaksys.com/forum/202004/846/ を参考にしました) 2. assoc, ftypeの設定を最初から実行 3. 再起動
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問