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

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

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

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

Q&A

解決済

2回答

1846閲覧

pythonでコマンドライン引数を認識させたい

jetfly

総合スコア3

Python

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

0グッド

0クリップ

投稿2020/10/15 15:22

前提・実現したいこと

pythonでコマンドライン引数に入力した内容を読み取れるようにしたいのですが、上手くできません。
問題の解決方法をご教授していただければありがたいです。

発生している問題・エラーメッセージ

IndexError: list index out of range

該当のソースコード

python

試したこと

import os
import sys

argv0 = sys.argv[0:]
print("argv0=", argv0)
argv1 = sys.argv[1:]
print("argv1=", argv1)

code = sys.argv[0]
print("code=", code)

num = sys.argv[1]
print("number=", num)

上記のプログラムをコマンドプロンプトにドラッグし、コマンドライン引数に1を代入すると下記の内容が出ました。

C:\Temp\python>C:\Temp\python\test.py 1
argv0= ['C:\Temp\python\test.py']
argv1= []
code= C:\Temp\python\test.py
Traceback (most recent call last):
File "C:\Temp\python\test.py", line 14, in <module>
num = sys.argv[1]
IndexError: list index out of range

引数が読み取られていないと思うのですが、どうすれば認識されるのでしょうか。
初歩的な質問だと思うのですが、教えてください。

補足情報(FW/ツールのバージョンなど)

python3.8

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

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

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

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

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

guest

回答2

0

環境設定(拡張子の関連付け)がちゃんと出来ていないと言うことではないでしょうか。
コマンドプロンプトで、

CMD

1assoc .py 2で、もし、 3.py=Python.File 4と表示されたら、その=の右辺を使って 5ftype Python.File

で、拡張子pyで実行されるコマンドが表示されます。私の場合は、
Python.File="C:\WINDOWS\py.exe" "%L" %*
で、%*が引き数を表します。これが無いとpy.exeに引き数が渡りません。

投稿2020/10/15 23:07

otn

総合スコア85901

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

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

jetfly

2020/10/18 07:29

確認したところpy.exeが無く代わりにpython.exeが表示されました。py.exeを新しくインストールするにはどうすればいいでしょうか。
otn

2020/10/18 07:52

py.exe でもpython.exeでもどっちでも良いです。問題は %* の有無なので。
jetfly

2020/10/18 08:43

色々設定して下記のようになりましたが、先頭にpythonをつけないと引数を認識しないのですがどうすればいいでしょうか。 Python.File="C:\Temp\anaconda\python.exe" "%1" %*
otn

2020/10/18 09:12

Python.File="C:\Temp\anaconda\python.exe" "%L" %* と、(%エル) にしてみてください。
jetfly

2020/10/18 14:35

変えてみましたが引数は認識されませんでした。
otn

2020/10/18 14:39

assoc .py で、 .py=Python.File と表示されるんですよね?
guest

0

ベストアンサー

IndexError が発生しないように

Python

1import os 2import sys 3 4if len(sys.argv) > 0: 5 argv0 = sys.argv[0:] 6 print("argv0=", argv0) 7if len(sys.argv) > 1: 8 argv1 = sys.argv[1:] 9 print("argv1=", argv1) 10 11if len(sys.argv) > 0: 12 code = sys.argv[0] 13 print("code=", code) 14 15if len(sys.argv) > 1: 16 num = sys.argv[1] 17 print("number=", num)

として
C:\Temp\python>C:\Temp\python\test.py 1
ではなく
C:\Temp\python>python C:\Temp\python\test.py 1
としてみてください。

投稿2020/10/15 15:42

lehshell

総合スコア1156

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

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

jetfly

2020/10/15 16:11

lehshell様ご回答いただき誠にありがとうございます。お陰様で問題を解決することができました。 また質問ですが、Anaconda prompt上でコマンドライン引数を入れる場合は必ず先頭にpythonを入れないといけないのでしょうか。他の方のを見るとpythonを入れずに実行できているのですが、この違いは何でしょうか。よければお答えいただけないでしょうか。
lehshell

2020/10/16 11:26

引数の受け渡しについては以下で説明があります。 https://docs.python.org/ja/3/tutorial/interpreter.html#argument-passing インタプリタ python をスクリプト名 test.py と 引数 1 を指定して起動することになります。 また、 https://docs.python.org/ja/3/tutorial/appendix.html#executable-python-scripts によれば、Windows では、拡張子 py ファイルを python.exe に関連付けることでダブルクリックで実行(コンソール上では直接 *.py ファイル実行)できることになりますが、引数については記載がなく対応していないのかもしれません。
jetfly

2020/10/18 07:31

ご回答いただきありがとうございます。参考にさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問