Pythonをコマンドラインで実行。全角文字(日本語)を引数にする場合の対処方法
2017/04/29
Pythonをコマンドライン引数付きで実行
Pythonをコマンドライン引数付きで実行する方法
Pythonをコマンドラインで、コマンドライン引数付きで実行するする方法は、以下のようになります。
実行するコマンドは下記の様になります。
「test.py」という Pythonスクリプトに対して「aaa」「bbb」の引数を付与して実行する処理です。
1 |
python test.py aaa bbb |
実行する Pythonのスクリプト「test.py」は以下のようになります。
1 2 3 4 5 6 7 |
import sys args = sys.argv argument0 = args[0] argument1 = args[1] argument2 = args[2] |
コマンドラインの引数は「sys.argv」で取得します。
また、最初の要素である「args[0]」には、実行したプログラムのファイル名が入ります。(この場合は、「test.py」が入ります。)
コマンドライン引数にスペースが含まれる場合
引数は、半角スペースで分割されますが、引数の中にスペースを入れたい場合は、下記の様に「”」(ダブルクォーテーション)で囲みます。
「’」(シングルクォーテーション)では文字と同じ扱いになりますので、ダブルクォーテーションを使いましょう。
1 |
python test.py aaa "bbb bbb" |
コマンドライン引数に日本語(全角文字、マルチバイト文字)が含まれる場合
ここまではおおよそ問題ないお話です。
そして、ここからがこの記事の本題なのですが、下記の様に引数として「日本語(全角文字。2バイト文字、マルチバイト文字)」を編集したい場合はどう処理をすればいいでしょうか?
正解は、以下の様になります。
実行するコマンドラインは、以下のようになります。
1 |
python test.py aaa "あいうえお" |
受け取る側の Pythonのスクリプトは以下のようになります。
1 2 3 4 5 6 7 8 9 |
# -*- coding: utf-8 -*- import sys args = sys.argv argument0 = args[0] argument1 = args[1] argument2 = unicode(args[2], 'cp932') |
受け取った引数を「utf-8」にして使いたいため、最後の行は「input2 = unicode(args[2], 'utf-8')
」としたくなりますが、コマンドを実行する環境が Windows環境のため、指定するのは Windows環境である「cp932」の方を指定します。
UnicodeDecodeErrorが発生する
「input2 = unicode(args[2], 'cp932')
」を実行せずに、引数をそのまま利用しようとすると、下記の様にデコードできません、というエラーになってしまいます。
UnicodeDecodeError: 'utf8' codec can't decode byte 0x8d in position 0: invalid start byte
これは、単純に printするだけであれば動作しますが、変数の型は「str」のため、その他の処理に利用しようとすると、文字コードが正しく設定されていないために発生する不具合です。
「input2 = unicode(args[2], 'cp932')
」を実行することで、「unicode」になりますので、後は、自由に利用できる様になります。
コマンドライン引数に日本語が含まれる処理の注意点
この記事は、Windows10のローカル環境に構築した環境にて実施しています。
そのため、「input2 = unicode(args[2], 'cp932-8')
」で指定する文字コードは「cp932」となっています。
Linuxや OS Xでは文字コードが違うはずですので、指定する文字コードが違います。
動作検証ができる環境がありませんでしたので、詳細は分かりませんが、Windows環境でない場合は、各自でご確認ください。
selenium+Pythonで処理の自動化に関する記事
Selenium WebDriver、Pythonをインストールしブラウザ自動操作の環境構築手順のまとめ
PythonでUTF-8など日本語(全角文字)を使う方法。コメントにも必要。
Pythonをコマンドラインで実行。全角文字(日本語)を引数にする場合の対処方法
Selenium WebDriverでFirefoxをプライベートウィンドウ/Chromeをシークレットモードで起動する方法・言語はpython
Selenium WebDriver、Pythonをインストールし Chromeの自動操作の環境構築手順のまとめ
Beautiful Soupを利用してPythonでスクレイピングを行う環境構築方法の解説
PythonでMySQLへの接続ライブラリMySQL-pythonの簡単インストール方法
PythonでURLの有無、存在をチェックするスクリプト
GoogleAdwords
GoogleAdwords
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!
関連記事
-
-
chromedriver.exe – ディスクがありませんと出てSeleniumの設定が上手くいかない
Selenium WebDriverを使ってChromeを自動操作する仕組みを作る際、chromedriver.exeを利用しますが、ディスクがありません、というエラーが発生する場合があります。その対処方法を解説します。
-
-
.gitignoreで無視フォルダの中の特定のファイルを除外「!(否定文)」を使う場合の注意点
Gitで管理する対象、対象外のファイル、フォルダの指定は .gitignoreに記述する。その基本的な記述の方法に加え、無視対象にしたフォルダの中の特定のファイルを管理対象にする記述方法を解説。
-
-
Beautiful Soupを利用してPythonでスクレイピングを行う環境構築方法の解説
BeautifulSoupはPythonでスクレイピングを行う際に便利なツール。インストール方法も簡単。ただ、事前にpipのインストールが必要でその解説もしてます。
-
-
FTPでダウンロード時にファイルが重複するため上書きしますか?と表示される問題
FTPでファイルをダウンロードする際に「ファイルが重複しています。上書きしますか?」というメッセージが出る場合がありますが、これの原因と対策、解決策の記事です。
-
-
日本語は2バイト文字?3バイト文字?
日本語は2バイトという理解でしたが、UTF-8では事情が違います。その説明です。
-
-
PythonでMySQLへの接続ライブラリMySQL-pythonの簡単インストール方法
PythonはMySQLに接続するライブラリは別途インストールが必要。なのでMySQL-pythonライブラリのインストール方法とサンプルスクリプトで動作検証までを解説。
-
-
SyntaxHighlighterを導入してソースコードを見やすくしてみました
PHP、HTMLなどのソースコードをブログで紹介するとき、SyntaxHighlighterを利用することで見やすく提供することが出来ます。
-
-
ブラウザのキャッシュを活用するの対策!広告バナーを消して表示を高速化
あなたのサイトが遅いのはバリューコマースのバナーではないですか?バリューコマースのバナーを外すだけでmod_deflateとmod_expiresを設定するより効果があります!
-
-
借りてはいけないレンタルサーバ実例4社・アルファメール・WEBアリーナ
餅は餅屋。サーバはサーバ屋が提供するサービスを利用するべきという記事で、具体例 4サービスを例にこんなサーバはNGと紹介しています。
-
-
コピーコンテンツ・直リンクの3つの対策Google通報などのまとめ
コピーコンテンツを発見したときにやること!Googleに通報、画像の直リンクを禁止、RSSの全文配信を停止。この対策をしないとあなたのサイトの評価も下がるかも!