Hatena::ブログ(Diary)

kuroの覚え書き

[Vmax] [Macintosh/PC] [Network] [Make] [science] [Programing]

注:個人的覚え書きであり、いかなる内容も保証されるものではありません。
(ツッコミは歓迎しますが、全てに応えられるとも限りませんのであしからず。)

2017-11-30

[][]python3でシェルスクリプトのようなことをする

lsをPythonで書くなら

ls.py

import os
import sys # モジュール属性 argv を取得するため

argvs = sys.argv  # コマンドライン引数を格納したリストの取得
argc = len(argvs) # 引数の個数
if (argc != 2):   # 引数が足りない場合は、その旨を表示
    print('Error... no argv')
    quit()         # プログラムの終了

ls = os.listdir(argvs[1])
for f in ls:
    print(f)

こんな感じ。

python3 ls.py ./

とするとカレントディレクトリをlsしたのと同じようなリストが返る。ただし、ディレクトリのリストということで

$ ls target.txt

みたいにファイル名でリストを得ることはできないらしい。またワイルドカードも使えない。

これじゃ不便だね。

ワイルドカードにも対応させるなら

ls2.py

import sys
import glob

argvs = sys.argv  # コマンドライン引数を格納したリストの取得
argc = len(argvs) # 引数の個数
if (argc != 2):   # 引数が足りない場合は、その旨を表示
    print('Error... no argv')
    quit()         # プログラムの終了

ls2 = glob.glob(argvs[1])
for f in ls2:
    print(f)

こんな感じかな。

$ python3 ls2.py "*"

これでls ./と同等

フルパスを書くと

$ python3 ls2.py "/usr/local/var/*"
/usr/local/var/homebrew
/usr/local/var/mysql

こんな感じになる。あくまでパスを表示するので*がないと普通のlsと同じ内容にならないし引数をクオーテーションで括る必要もある。

あとshというライブラリをpipでインストールすればshellコマンドが使えるようになるのだけどこれもワイルドカードが使えなかった。

ls3.py

from sh import ls
import sys # モジュール属性 argv を取得するため

argvs = sys.argv  # コマンドライン引数を格納したリストの取得
argc = len(argvs) # 引数の個数
if (argc != 2):   # 引数が足りない場合は、その旨を表示
    print('Error... no argv')
    quit()         # プログラムの終了

ls1 = ls.bake(-1)    #ls -1
lsa = ls1(argvs[1])
print(las)

参考ページ

http://www.yukun.info/blog/2008/07/python-command-line-arguments.html

https://qiita.com/atsaki/items/e033ab9ca8427b1f6fd9

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/k-kuro/20171130/p1