pythonでユーザー名を取得する

ユーザー名の取得方法はいろいろあります。

 

下記のやり方があります。

 

ユーザー名の取得

 

で調べてたらgetpass.getuser()のソースを調べてる人がいて

LOGNAME, USER, LNAME, USERNAME から値を取ってたんですねー

なるほど

qiita.com

pythonでホスト名を取得する。

ホスト名の取得方法はいくつかあるようです。

下記で簡単に取得できます。

ホスト名を取得

 

ホスト名はどこからとってるのかなと調べてたら

こんなpythonの実行もあるのか!

github.com

 

python 実行する時に -c でスクリプトを実行できるんですね。

これは便利かも。

[root@hermes ~]# python -c 'import socket; print socket.getfqdn()'
localhost.localdomain
[root@hermes ~]# python -c 'import socket; print socket.gethostname()'
ansible.tld

 

結局どこを取ってるかはわかってない。。。

ーーー

(追記)

調査してみた

ホスト名がどこから読んでいるか

 

hostnameコマンドでホスト名変えても echo $HOSTNAMEや、
/etc/sysconfig/networkのHOSTNAMEも変わっていなかったので
どうやら「内部的なhostname」を持っていてこれが優先されるようだ。

gistにも書いたけど、/etc/hostsのホスト名はドットが入ってないと
ホスト名として取ってこないってのは知らなかったなあ。

※/etc/hosts は service network reload とかしなくても変更がそのまま反映されたから

getfqdn()は直接/etc/hostsを読みに行ってるみたいね。


あと検証する上でできなかったこととして、
検証は会社のawsで(こっそり)やったんだけど
/etc/sysconfig/networkのHOSTNAMEを変更しても、再起動する際に元に戻って
起動してしまうのでここの影響はわからなかった。

 

あと疑問なんだけど/etc/hostsのホスト名を変えていくと
なんか変な文字(連続?アンダーバー?)を入れると、ホスト名もlocalhost.localdomainも
取ってくるのをやめてgethostname()でホスト名を取ってきているようだった。

その条件がなんなのかしつこいくらいやりなおしてみても
条件がわからなかった。
これがけっこう心残り。

文字数?連続文字?

うーんなんだろな

わかんね

いつもよくわからん仕事をしている人

自分は技術者派遣として働いています。

何度か常駐先は変わりましたが、たまたま大手IT企業の案件に当たり

たまたまそこの案件に長くいることがありました。

やっぱり大手企業なので、派遣で来てる人が多くいろんな会社から来ているところでした。

そこでこれもたまたまなのですが、何度か会話をすることがあり親しくなった人がいました。

とりあえずその人を小平(仮名)さんと呼びます。

 

けっこう博識な小平さん

年齢は40代後半くらいか?と思われますが、年齢不詳です。

会話をしていると中学生のお子さんがいるとは聞いてたので

おそらく40代くらいではないか?と推測しています。

男性のかたです。

 

私はIT業界で働いているので、Facebookgoogleが○○○なプロダクトを出してて・・・

といった業界の最先端の話がとても好きでした。

 

小平さんと会話していると、よく小平さんの方から

そう言う先端の話をしてくれるので、とても話が面白いなと思っていました。

やっぱり経験が長いせいか、「あの○○○が出る前の状況はxxxでねえ」とか

裏側や由来を話してくれるので、とても勉強になるので

へーと尊敬の思いがありました。

 

自分はプログラミング関係を最初にやってたので

当時サーバー関係のことはあまりわかっていませんでした。

 

小平さんは自分の席の近くにいたので

ちょことちょこと質問することがありました。

 

インスタンスってなんなんですかねー」

インスタンスってのは、まあいわゆる実体って意味なんだよ。動いている実体で・・・」

 

・・・ん?、よくわからん。

まあ、自分の知識がなさすぎて理解できないんだろうと思っていました。

 

その時はほんと自分の知識が無いからだと思ってましたが

細かい部分を聞いてみるとモヤっとした回答が多いなあ

と言うことがよくあるなあと感じてました。

 

何やってるか良くわからない小平さん。。。

小平さんはとにかく何やってるのかよくわからない人でした。(汗)

  

小平さんの席の近くを通ってみると、

なんだかいつも技術系のブログやツイッターを見ていました。

 

「ほんと何やってんだろうーな?」と私はいつも思っていました。

 

 

自分のチームではないのですが、自分の会社の別のチームが

パートナーとして使っていました。

そのチームで働いてる同僚に聞いてみると

とにかくドキュメントを出さない人だったのです。。。

 

なんでもサーバー管理の運用を任されたチームで

引き継ぎ前のチームがとても小さく、さらに資料を管理してなかった。

いわゆる属人化してたチームでした。

 

ま そこは良くないとはいえ、運用を任された以上

手探りでも仕様を理解していくべきかと思います。

 

自分だったら、ここまで調べたけどそれ以上はわかんねーよ

かんべんしてね、てへ!とかやっちゃうけど

なんとかかんとかわかる部分までは仕様を調べて

ドキュメント化するべきなんじゃないでしょうか。

 

 

仕様がわからないところから始めるのはしょうがないと思います。

でも自分が調べたものがどんなものかを報告、説明するのに

ドキュメント化は必要でしょう。

 

・・・・でも小平さんは出さなかった。

 

なんだかんだ小平さんは

「いやー元々のサーバーの中身も何もわかんないからねー」

「どう対処すればいいかわからないから、書きようがないよ!」

とか、もっともらしいことを言います。

っと言うかごねます。

 

なのでそのチームのリーダーはしびれを切らしその人を切りました。

と言うかそう言う噂を聞いて、

いつのまにかチームミーティングにいなくなってたので

切ったらしいということがわかりました。

 

 その後の小平さん

 

でフロアを歩いていると驚いてしまったのですが、

またいつのまにか小平さんが別チームで働いていましたwww

 

でやっぱり席の近くを通ってみてみるとhatenaブックマークだか

2chまとめだかの関係のないサイトを見ています。。。

ちょっとならいいんだけど後ろをみるといつも見ています。

 

あんまり参考にならない教訓

 

その人にいろいろ質問をして見たんだけど

技術知識はほんとよく知っているのだ。

だけど回答は的を射ていない。

そう言う人って説明もあいまいで、いわゆる使えない人なんだな。

と思いました。

そう言う予感ってどこかしら的中するものだなとよくわかりました。

 

 

またなんでこんな人がずーっといれるのか不思議でしたが

上述のサーバー管理と言うものが、まだ別の根幹となる部署がまだ使ってるもので

廃棄したいけど廃棄できないもので、持て余してたものでした。

なので仕事としては存在する、だからまあ業務歴が長いし

小平さんにやってもらおうか、みたいなことを上は考えてたようで

小平さんの存在理由がありました。

 

属人化する仕事はよくないのだけれども

その時は、そういう生存戦略もあるのだなと思い

なりたくは無いけどしたたかな生き方も必要なんだと感じました。

 

 

また ドキュメントが全てでは無いですが

自分のやった仕事をドキュメント化するというのは

証拠としても、説明としてもとても大事なことなんだなと

よく理解できた経験でした。

 

 

小平さんは今どうしてるか全くわかりませんが

ふと思い出してしまいます。

 

 

文字列数字をint型数値リストに変換

config に数値を書いておいて、その数値リストを使いたい場合があります。

そこで取得した文字列数字をsplitで分割しても、単なる「string」の数字のリストになってしまうんですよね。

 

でどうしよっかなと、俺の性能が良くない頭で考えてしまうと

それぞれの値についてtype変換すればいいじゃん!と考えてしまいます。

(こんな感じ、int("3")とか)

 

これは結構スマートではありません。

 

こう言う時には map を使います。

 

こんな感じです。

 

文字列数字をint型リストにする

 

うまく行きましたね。

 

あ 良く探したらこのgitにも書いてありましたね。

 

github.com

 

↑このページの最後のコードでわざわざlistを使ってるのはなんでだろうな

mapの返却値はlistだしなあ。

 

わからーん!

「Learning YARN」を読んでみた

 

Learning Yarn

Learning Yarn

 

 

今回はYARN関連の本を読んでみました。

Hadoopとは直接関係ないんだけど、業務でちょこちょこYARNを使ってるので
上長にお願いし、購入してもらいました。(6000円もするのに)ありがとうございますー


で、これなんですが、やっとこさとこ読んでみて
けっこう内容がいい!というものにやっと巡り合いました。


いかんせん自分はYARNの開発とかプラグインをいじることはしてないので
これは使える!とかは無かったのですが、中盤のチャプターで
状態遷移の解説が詳しく書いてあり、ここはかなり使える内容なんじゃないのかと思いました。

オープンソースを使ってると、プログラムの裏側はどういう思想で動いてるんだよー
っとアーキテクチャーを理解したい場面がこれまで何度かあったので
裏側の理解にはかなり役に立ちます。


内容としては

  • MapReduce ver.1 と ver.2 の違い
  • Hadoop-YARNクラスターの構築
  • YARNのライフサイクル管理 (状態遷移はここのチャプター)
  • YARNアプリケーションの書き方
  • コンポーネント紹介
  • RESTサービス
  • YARNのスケジューリング方法
  • YARNのセキュリティ
  • YARNでリアルタイム処理(Spark, Storm,などを使う)

こんな感じの内容でした。


最近Hadoopクラスターでアプリケーションを実行するのに
Dockerが使われるようです。そのDockerを制御するのがYARNでやれる(?)
そうです。(まちがってたらごめんなさい)
たしかYARNと似たプロダクトMesosがそんな感じだった気がする。

今後HadoopクラスターでSpark使う時にこの本は役立つかもなあ。


感想として、うーんやっぱりPACKTの本は当たりだった。

(後述)
あれ、ちょっと調べてみるとスケジュールツールには
kubernetesかMesosがよく使われてるみたいなんだな。
YARNはあまりつかわないのかな。
要調査だな。いつかね、いつか。。。。

logging formatで定義に無いものを書く方法

以前のブログでlogging.propertyの書き方を書いていました。

 

suganoo.hatenablog.com

 

※logging.propertyだかlogging.confだか、どっちが適切な表現なのかはここでは置いておく。

 

logging.confを書いている時に、あれこんなことできないかなと悩みました。

  • ログにホスト名、ユーザー名入れられないかな?
  • ログの区切りはスペースじゃなくてタブで区切りたいな。

で、loggingのドキュメントを読んでも、あれ?ホスト名とかユーザー名って無いんですよね。

タブの区切り方も書いてない。(ように見える)
へーへー

https://docs.python.jp/3/library/logging.html#logrecord-attributes

 


んーっとどうしたものか、隠しコマンド的なものもないのかなと苦慮した挙句
一つの解決策を得た。


なんとLogRecord属性って自分でも定義できるんですね!!

 

logging.infoのパラメータにextraというパラメータがあって、
そこに独自定義したdictionary を渡してやると、

なんとそのままformatに定義した変数が入れ替わる!

 

タブも同じように渡してやって、区切りをタブにすることができました。


やったー すごいすっきりした。

 

ユーザー定義のLogRecord属性

【globals()の使い方】文字列のクラス名からインスタンス生成する

こんな処理をするスクリプトを作っていました。

  • ログをダウンロードして
  • ログパースして
  • webサーバーにアップロード

このログをパースする処理なんだけど、ダウンロード/アップロードは変わらない。

ログの種類がある程度決まってるから、実行する時にログパースするクラスだけを変えて

パース処理できないかなーと考えてました。

 

つまり実行時に指定する文字列クラス名からインスタンス生成できないかなーと考えてました。

したら、ありました。 globals() を使うそうです。

 

【globals()】文字列からクラス生成する

 

globals() でimportしたクラスを全部把握してるんですね。

そこからクラス名を取得してインスタンス生成すると。

んーうまくいきそうだ。