エス技研

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.

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

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

  関連記事

mod_pagespeedでWebサイトを超簡単高速化・Google謹製の最終兵器

Webサイトの表示スピード高速化の最終兵器、Google謹製mod_pagespeedの解説です。レンタルサーバではX-Serverでしか利用できませんが、ワンクリックで高速化します。

借りてはいけないレンタルサーバ実例4社・アルファメール・WEBアリーナ

餅は餅屋。サーバはサーバ屋が提供するサービスを利用するべきという記事で、具体例 4サービスを例にこんなサーバはNGと紹介しています。

So-netのレンタルサーバHSはヤバイ・借りてはいけないレンタルサーバリスト

餅は餅屋。サーバはサーバ屋が提供するサービスを利用するべきという記事で、単独でSo-netを紹介。OEMでサービスの提供を受けているだけなので何とも残念すぎる内容。

エックスサーバーで独自SSLは永久無料で取り放題。利用方法と理由を解説!

エックスサーバーでは独自SSLが無料でいくつでも設置できるように!しかも、国、都道府県などの数項目の入力と数クリックだけという超簡単!SSL化しない理由がない!

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

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

mod_pagespeedカスタマイズで高速化を詳細解説・Google謹製

mod_pagespeedをデフォルトのまま使っていませんか?mod_pagespeedはデフォルトのままでも速い!でも仕組みを理解し設定し直せばより速くなる!

直リンク禁止の.htaccessを超分かりやすく解説。日本語じゃなくてPHPで説明

直リンクを禁止する.htaccessの記述内容を日本語ではなくPHPで解説!私自身もこの方法ですっかり理解できました。.htaccessって簡単!って思えますよ。

Selenium WebDriver、Pythonをインストールしブラウザ自動操作の環境構築手順のまとめ

ブラウザを自動操作しテストを実行するロボットをselenium WebDriver+Pythonの環境を構築し、動作確認までの手順のまとめ。初心者向けに詳細解説。サンプルソースも。

ロリポップからX-Serverに引越し。サーバの月額費用が増えても求めた理由は?

ロリポップからX-Serverに引越すその理由とは?SEOの観点からも少しでもサーバレスポンスが早いサーバが求められロリポップでは限界を感じたからです。

PythonでUTF-8など日本語(全角文字)を使う方法。コメントにも必要。

Pythonの標準では日本語(全角文字)を利用できないので、利用する際は文字コードを宣言する必要がある。「# coding: utf-8」の様に記述すればOK。