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

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

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

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

Q&A

解決済

1回答

698閲覧

python3.6 コマンドライン引数

shinya_next

総合スコア15

Python 3.x

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

0グッド

0クリップ

投稿2017/11/01 19:01

#質問

python初心者です。呼び出す際に、コマンドライン引数を指定していないからエラーが出ているとのことですが、具体的にどうすればいいのでしょうか? 本スクリプトの引数は以下の通りです。 python trial_handsign_SVM.py <dir_learn><>dir_test> 画像データは以下のフォルダにあります。 my_learn8 学習用画像のディレクトリ my_test2 テスト用画像のディレクトリ

#エラー

File "C:/Users/LSL/Desktop/examples/06/handsign/trial_handsign_SVM.py", line 50, in <module> train_path = argvs[1] IndexError: list index out of range

#該当のコード

# -*- coding: utf-8 -*- import os import sys import glob import numpy as np from skimage import io from sklearn import datasets IMAGE_SIZE = 40 COLOR_BYTE = 3 CATEGORY_NUM = 6 ## ラベル名(0~)を付けたディレクトリに分類されたイメージファイルを読み込む ## 入力パスはラベル名の上位のディレクトリ def load_handimage(date): # ファイル一覧を取得 files = glob.glob(os.path.join(date, '*/*.png')) # イメージとラベル領域を確保 images = np.ndarray((len(files), IMAGE_SIZE, IMAGE_SIZE, COLOR_BYTE), dtype = np.uint8) labels = np.ndarray(len(files), dtype=np.int) # イメージとラベルを読み込み for idx, file in enumerate(files): # イメージ読み込み image = io.imread(file) images[idx] = image # ディレクトリ名よりラベルを取得 label = os.path.split(os.path.dirname(file))[-1] labels[idx] = int(label) # scikit-learn の他のデータセットの形式に合わせる flat_data = images.reshape((-1, IMAGE_SIZE * IMAGE_SIZE * COLOR_BYTE)) images = flat_data.view() return datasets.base.Bunch(data=flat_data, target=labels.astype(np.int), target_names=np.arange(CATEGORY_NUM), images=images, DESCR=None) ##################################### from sklearn import svm, metrics ## 学習データのディレクトリ、テストデータのディレクトリを指定する if __name__ == '__main__': argvs = sys.argv train_path = argvs[1] test_path = argvs[2] # 学習データの読み込み train = load_handimage(train_path) # 手法:線形SVM classifier = svm.LinearSVC() # 学習 classifier.fit(train.data, train.target) # テストデータの読み込み test = load_handimage(test_path) # テスト predicted = classifier.predict(test.data) # 結果表示 print("Accuracy:\n%s" % metrics.accuracy_score(test.target, predicted))

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

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

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

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

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

guest

回答1

0

ベストアンサー

呼び出す際に、コマンドライン引数を指定していないからエラーが出ている

引数はこんな感じで指定できます。
この場合、abcdefが指定された引数です。
引数

Python

1# coding: UTF-8 2import sys 3 4print("引数0: " + sys.argv[0]) 5print("引数1: " + sys.argv[1])

引数の拾い方

sys.argv関数では、引数を文字列として拾うことができます。
sys.argv[0] ---> 0番目の引数(Pythonのファイル本体)
sys.argv[1] ---> 1番目の引数(Pythonのファイル本体に続く、スペース区切りの引数)
sys.argv[2] ---> 2番目の引数(Pythonのファイル本体に続く、スペース区切りの引数)
(以下略、スペースで区切って指定すれば、指定しただけ引数を拾えます。)

ここで、無い引数を呼び出そうとするとIndexErrorが起きます。
ダブルクリックで起動すると、引数を指定できないので、sys.argv[1]をすると無いものを呼び出そうとしてIndexErrorでこけてしまうというわけです。

引数の拾い方のまとめ

起動方法具体的な起動方法(例)引数0引数1
ダブルクリック(引数指定不可アイコンをダブルクリックargtest.pyなし(IndexError
コマンドライン(引数指定なしpython argtest.pyargtest.pyなし(IndexError
コマンドライン(引数指定ありpython argtest.py abcdefargtest.pyabcdef

投稿2017/11/01 19:37

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

shinya_next

2017/11/01 19:53

このコードの場合は python trial_handsing_SVM.py ./data/my_learn8/ ./data/my_test2/ でいいのでしょうか?
退会済みユーザー

退会済みユーザー

2017/11/02 06:47 編集

> 画像データは以下のフォルダにあります。 > my_learn8 学習用画像のディレクトリ > my_test2 テスト用画像のディレクトリ > train_path = argvs[1] > test_path = argvs[2] とあるので、 python trial_handsing_SVM.py 学習データフォルダ テストデータフォルダ の様式になっていますね。たぶん動きますが、もしダメならフルパスで指定してください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問