【大阪 / 横浜 / 徳島】インフラ / サーバーサイドエンジニア募集中!

【大阪 / 横浜 / 徳島】インフラ / サーバーサイドエンジニア募集中!

【導入実績 500社以上】AWS 構築・運用保守・監視サービス

【導入実績 500社以上】AWS 構築・運用保守・監視サービス

【CentOS 後継】AlmaLinux OS サーバー構築・移行サービス

【CentOS 後継】AlmaLinux OS サーバー構築・移行サービス

【WordPress 専用】クラウドサーバー『ウェブスピード』

【WordPress 専用】クラウドサーバー『ウェブスピード』

【格安】Webサイト セキュリティ自動診断「クイックスキャナー」

【格安】Webサイト セキュリティ自動診断「クイックスキャナー」

【予約システム開発】EDISONE カスタマイズ開発サービス

【予約システム開発】EDISONE カスタマイズ開発サービス

【100URLの登録が0円】Webサイト監視サービス『Appmill』

【100URLの登録が0円】Webサイト監視サービス『Appmill』

【200ヶ国以上に対応】グローバル eSIM「ビヨンドSIM」

【200ヶ国以上に対応】グローバル eSIM「ビヨンドSIM」

【中国への旅行・出張・駐在なら】中国SIMサービス「チョコSIM」

【中国への旅行・出張・駐在なら】中国SIMサービス「チョコSIM」

【グローバル専用サービス】北米・中国でも、ビヨンドのMSP

【グローバル専用サービス】北米・中国でも、ビヨンドのMSP

【YouTube】ビヨンド公式チャンネル「びよまるチャンネル」

【YouTube】ビヨンド公式チャンネル「びよまるチャンネル」

キャリッジリターンを使ってPythonでプログレスバー作成してみよう

インフラエンジニアの齊藤です。

今日は、キャリッジリターン(CR)について皆さんに知っていただき、いくつかスクリプトを書いてみたいと思います。
そして、Pythonでキャリッジリターンを使用し、プログレスバーを作成してみます。

キャリッジリターン(CR)とは

キャリッジリターン(CR)とはrで表される特殊記号です。改行文字nならご存じの方も多いと思います。

キャリッジリターンとはなんでしょうか。

元々はタイプライターを使用する際に、文字を印字するキャリッジと呼ばれる部分を手で戻して使う動作をキャリッジリターン(carriage return: CR)といいます。

また、新しい行へ移動する動作はラインフィード(line feed: LF)といいます。

今日まで使用されているすべてのOSは電子タイプライタとの互換性を考慮していた歴史があり、この'r'が何らかの形で登場します。

たとえば、WindowsOSであれば、改行はrnです。これは「一度元の位置に戻って(CR)から、新たな行へ移動する(LF)」と解釈できます。

Unix, Mac, Linux, BSDなどは、POSIXという規格に基づきrとnは別々に使用します。

改行文字nを使用した時は、新たな行の先頭へカーソルが設定されます。

つまり、nはCRとLFを両方合わせた役割を持っています。一方でrはカーソルを元の場所へ戻すCRの役割を持っています。

rを使ってみる

OS別に例を挙げましたが、プログラミング言語上でも、rとnは分けて使うことが多いです。

実際にpythonでrを使用してみましょう。

$ python -c "import sys; sys.stdout.write('beyondrBn')"
Beyond

・「-c」はpythonでワンライナーを書くためのオプションです。
・sys.stdout.writeで標準出力を行い、文字列はバッファ(キャッシュ)に書き込まれます。

さて、'beyondrBn'では、どういう流れで表示結果が決まるかというと、

1.はじめに文字列は、beyondを表示します。このとき、カーソルはdの後にあります。
2.rがあるのでカーソルはbの先頭に移ります。
3.今度はBをbに被せて印字します。
4.nがあるので改行します。

このように、rは何度も同じ行に文字を書き込むことができます。

プログレスバーを作成する

上記の特性を利用して、コマンドライン上で動くプログレスバーを作成できます。以下はpythonで書いたプログレスバーです。

import sys, time

def prog_bar(length=100):
    for i in range(length):
        sys.stdout.write('#'*i + 'r')
        sys.stdout.flush()
        time.sleep(0.01)

for i in range(4):
    prog_bar()

sys.stdout.writeは、ターミナルに表示を行う前にキャッシュしています。
(実はprint()は、内部でsys.stdoutを使用しています。)
sys.stdout.flushを用いることで、キャッシュされた情報を削除しています。

アニメーションを書いてみる

くるくるバーが回転する楽しいアニメーションも書いてみましょう。(以下はpython3で動作確認済です)

import time
space = '.'
bar = '-|/'
length = 100
printset = (('{0}{1}r'.format
             (space*(i-length//2) if i > length//2 else '', bar[i%4]), time.sleep(0.05)) 
           for i in range(length))

for i in printset:
  print(i[0], end='')
print(' '*length, end='r')

ほかにも色々な用途に使えます。
私は、パスワードを生成するスクリプトに、スロットのようなアニメーションをつけてみたりもしています。
是非拡張して遊んでみてください。

開発のプロに相談したい場合

弊社ビヨンドでは、これまでに培ったシステム開発の豊かな実績・技術・ノウハウと、OSS の技術、AWS などのクラウド技術を掛け合わせた、確かなクオリティとコストパフォーマンスに優れた、Webシステムの受託開発をおこないます。

また、大規模・高負荷なゲームやアプリ・デジタルコンテンツなどの、Webシステム / アプリ基盤のインフラ構築・運用の技術とノウハウを駆使した、サーバーサイド / バックエンド開発・独自APIの連携開発を手掛けています。

開発案件でお困りの方は、下記のサイトをご覧ください。

● Webシステム開発
● サーバーサイド開発(API / DB)

この記事がお役に立てば【 いいね 】のご協力をお願いいたします!
0
読み込み中...
0 票, 平均: 0.00 / 10
5,556
X facebook はてなブックマーク pocket
【ウェビナー】マルチクラウド入門 ~あなたのビジネスに最適なクラウドとは?主要8クラウド最新情報をお届け!~

【ウェビナー】マルチクラウド入門 ~あなたのビジネスに最適なクラウドとは?主要8クラウド最新情報をお届け!~

【ウェビナー】運用体制から具体的な手順まで!クラウドサーバー運用保守の全貌を大公開

【ウェビナー】運用体制から具体的な手順まで!クラウドサーバー運用保守の全貌を大公開

この記事をかいた人

About the author