エス技研

WordPress、CakePHP、PHP、baserCMSなどの Web系システムを中心に情報を提供します!


Pythonをコマンドラインで実行。全角文字(日本語)を引数にする場合の対処方法

      2017/04/29

Pythonをコマンドライン引数付きで実行

 

Pythonをコマンドライン引数付きで実行する方法

 
Pythonをコマンドラインで、コマンドライン引数付きで実行するする方法は、以下のようになります。
 
実行するコマンドは下記の様になります。
「test.py」という Pythonスクリプトに対して「aaa」「bbb」の引数を付与して実行する処理です。
 

 
実行する Pythonのスクリプト「test.py」は以下のようになります。
 

 
コマンドラインの引数は「sys.argv」で取得します。
また、最初の要素である「args[0]」には、実行したプログラムのファイル名が入ります。(この場合は、「test.py」が入ります。)
 
 


 

コマンドライン引数にスペースが含まれる場合

 
引数は、半角スペースで分割されますが、引数の中にスペースを入れたい場合は、下記の様に「”」(ダブルクォーテーション)で囲みます。
「’」(シングルクォーテーション)では文字と同じ扱いになりますので、ダブルクォーテーションを使いましょう。
 

 
 

コマンドライン引数に日本語(全角文字、マルチバイト文字)が含まれる場合

 
ここまではおおよそ問題ないお話です。
そして、ここからがこの記事の本題なのですが、下記の様に引数として「日本語(全角文字。2バイト文字、マルチバイト文字)」を編集したい場合はどう処理をすればいいでしょうか?
 
正解は、以下の様になります。
実行するコマンドラインは、以下のようになります。
 

 
受け取る側の Pythonのスクリプトは以下のようになります。
 

 
受け取った引数を「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の有無、存在をチェックするスクリプト

 - プログラミング・Web関連技術

GoogleAdwords

GoogleAdwords

最後までお読みいただきましてありがとうございます。
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

下記の空欄を埋めてください。 * Time limit is exhausted. Please reload CAPTCHA.

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

※入力いただいたコメントは管理者の承認後に掲載されます。

  関連記事

Webサイト公開時に重複コンテンツを排除する.htaccessのリダイレクトの設定のまとめ

サイトを公開する際にはURLの正規化は必須です。正規化とは何かを解説し、.htaccessに設定すべきリダイレクトの設定を具体的に説明します。

SyntaxHighlighterを導入してソースコードを見やすくしてみました

PHP、HTMLなどのソースコードをブログで紹介するとき、SyntaxHighlighterを利用することで見やすく提供することが出来ます。

.gitignoreを更新しても反映されないときは「git rm -r --cached .」でキャッシュを削除
.gitignoreを更新しても反映されないときは「git rm -r –cached .」でキャッシュを削除

gitの.gitignoreを変更しても記述内容が反映されない時がある。それはGitのキャッシュが残っているため。そんなときは「git rm」コマンドを使ってキャッシュを削除すれば解決する。

本当に?GMO系ロリポップ・ヘテムルを無料で運用する方法があった!

ロリポップ、ヘテムルを株主優待を利用して実質無料で運営しよう!という解説記事です。株主優待で提供されるサービスの内容を解説し、無料になる仕組みを解説します。

サイト更新、引越時に.htaccessでリダイレクトする方法解説

サイト更新,引越しなどでサイトのURLが変わった場合のリダイレクトを.htaccessのRewriteEngineを使って処理する方法の解説です。

Gitはフォルダ自体を管理対象にはできない。空のフォルダを設定する手順
Gitはフォルダ自体を管理対象にはできない。空のフォルダを設定する手順

Gitはフォルダだけを管理対象にすることはできない。そのため空の.gitkeepファイルを作成し管理対象にすることで、それが入っているフォルダも管理対象にする、と言う手順で管理を行う。

EストアのショップサーブのWordPressサービスにメリット無し

ショップサーブのオプションサービスのWordPressを使ってみましたがデータベースには直接触れず使えないサービスでした。

CentOS環境に ntpdをインストールして自動的に時刻を取得する設定にする
CentOS環境に ntpdをインストールして自動的に時刻を取得して合わせる設定にする

VirtualBoxに構築した CentOSの環境の時計がずれているとき、ntpdをインストールし、時計を合わせる方法を解説。NTPサーバを指定する方法や ntpdを自動起動する設定も解説。

Gitで基本的なデプロイ(push、pullで本番公開)環境を作る手順解説
Gitで基本的なデプロイ(push、pullで本番公開)環境を作る手順解説

開発進行中の環境、公開中の環境にGitを導入する。その基本的な手続きを解説。Gitの導入、ローカルリポジトリを作成。リモートリポジトリを利用し、本番環境にデプロイする手続きを解説。

日本語は2バイト文字?3バイト文字?

日本語は2バイトという理解でしたが、UTF-8では事情が違います。その説明です。