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
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!
関連記事
-
サイト更新、引越時に.htaccessでリダイレクトする方法解説
サイト更新,引越しなどでサイトのURLが変わった場合のリダイレクトを.htaccessのRewriteEngineを使って処理する方法の解説です。
-
Gitで基本的なデプロイ(push、pullで本番公開)環境を作る手順解説
開発進行中の環境、公開中の環境にGitを導入する。その基本的な手続きを解説。Gitの導入、ローカルリポジトリを作成。リモートリポジトリを利用し、本番環境にデプロイする手続きを解説。
-
Selenium WebDriver、Pythonをインストールし Chromeの自動操作の環境構築手順のまとめ
Selenium WebDriverを使ってChromeを自動操作する環境を構築する手順のまとめ。使用するPythonのインストールから、サンプルスクリプトの動作確認までを詳細解説。
-
コピーコンテンツ・直リンクの3つの対策Google通報などのまとめ
コピーコンテンツを発見したときにやること!Googleに通報、画像の直リンクを禁止、RSSの全文配信を停止。この対策をしないとあなたのサイトの評価も下がるかも!
-
.gitignoreを更新しても反映されないときは「git rm -r –cached .」でキャッシュを削除
gitの.gitignoreを変更しても記述内容が反映されない時がある。それはGitのキャッシュが残っているため。そんなときは「git rm」コマンドを使ってキャッシュを削除すれば解決する。
-
エックスサーバーで独自SSLは永久無料で取り放題。利用方法と理由を解説!
エックスサーバーでは独自SSLが無料でいくつでも設置できるように!しかも、国、都道府県などの数項目の入力と数クリックだけという超簡単!SSL化しない理由がない!
-
X Serverへの引越しの注意点まとめ。ロリポップとの違いと対処方法 6事例
ロリポップからX Serverに引越し。ロリポップとX Serverの違いに注目することでX Serverの設定方法を明確にします。またX Serverならではの設定ポイントなども解説。
-
直リンクとは何か?直リンクとディープリンクの違いと著作権問題
直リンクは著作権違反なのか?議論の前にまず「直リンク」の意味を正しく理解しよう。直リンクは他のサイトの画像を読み込む、ディープリンクなど多様な意味がある。
-
CentOS環境に ntpdをインストールして自動的に時刻を取得して合わせる設定にする
VirtualBoxに構築した CentOSの環境の時計がずれているとき、ntpdをインストールし、時計を合わせる方法を解説。NTPサーバを指定する方法や ntpdを自動起動する設定も解説。
-
Gitで「fatal: Authentication failed for ‘https://example.com/git_repositories/example.git/’」のエラーが出た場合の対処方法の一つ
Gitのリモートリポジトリにアクセスする際、Authentication failedのエラーが。しかし、ID、PASSが間違っているのではなく、リモートリポジトリのURLが間違っている場合もあるので再度確認を。