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
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!
関連記事
-
-
ロリポップからX-Serverに引越し。サーバの月額費用が増えても求めた理由は?
ロリポップからX-Serverに引越すその理由とは?SEOの観点からも少しでもサーバレスポンスが早いサーバが求められロリポップでは限界を感じたからです。
-
-
Gitで基本的なデプロイ(push、pullで本番公開)環境を作る手順解説
開発進行中の環境、公開中の環境にGitを導入する。その基本的な手続きを解説。Gitの導入、ローカルリポジトリを作成。リモートリポジトリを利用し、本番環境にデプロイする手続きを解説。
-
-
借りてはいけないレンタルサーバ実例4社・アルファメール・WEBアリーナ
餅は餅屋。サーバはサーバ屋が提供するサービスを利用するべきという記事で、具体例 4サービスを例にこんなサーバはNGと紹介しています。
-
-
直リンク禁止の.htaccessを超分かりやすく解説。日本語じゃなくてPHPで説明
直リンクを禁止する.htaccessの記述内容を日本語ではなくPHPで解説!私自身もこの方法ですっかり理解できました。.htaccessって簡単!って思えますよ。
-
-
Gitで「fatal: Authentication failed for ‘https://example.com/git_repositories/example.git/’」のエラーが出た場合の対処方法の一つ
Gitのリモートリポジトリにアクセスする際、Authentication failedのエラーが。しかし、ID、PASSが間違っているのではなく、リモートリポジトリのURLが間違っている場合もあるので再度確認を。
-
-
ブラウザのキャッシュを活用するの対策!広告バナーを消して表示を高速化
あなたのサイトが遅いのはバリューコマースのバナーではないですか?バリューコマースのバナーを外すだけでmod_deflateとmod_expiresを設定するより効果があります!
-
-
PythonでMySQLへの接続ライブラリMySQL-pythonの簡単インストール方法
PythonはMySQLに接続するライブラリは別途インストールが必要。なのでMySQL-pythonライブラリのインストール方法とサンプルスクリプトで動作検証までを解説。
-
-
本当に?GMO系ロリポップ・ヘテムルを無料で運用する方法があった!
ロリポップ、ヘテムルを株主優待を利用して実質無料で運営しよう!という解説記事です。株主優待で提供されるサービスの内容を解説し、無料になる仕組みを解説します。
-
-
chromedriver.exe – ディスクがありませんと出てSeleniumの設定が上手くいかない
Selenium WebDriverを使ってChromeを自動操作する仕組みを作る際、chromedriver.exeを利用しますが、ディスクがありません、というエラーが発生する場合があります。その対処方法を解説します。
-
-
.gitignoreを更新しても反映されないときは「git rm -r –cached .」でキャッシュを削除
gitの.gitignoreを変更しても記述内容が反映されない時がある。それはGitのキャッシュが残っているため。そんなときは「git rm」コマンドを使ってキャッシュを削除すれば解決する。