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