Colaboratoryのノートブック上でUbuntuコマンドを実行する

アイキャッチ, colab-command Colab

ColaboratoryにFileツールが実装されてから、Ubuntuコマンドの必要性も低下しましたが、大量のファイルを一括操作したり、中身のわからないファイルを表示させたりする機会もあると思います。そのような時のためにまとめておきます。

シェルコマンドの実行

エクスクラメーションマークの後ろにシェルコマンドを記述します。

!ls -l

結果を変数に代入することもできます。1行1要素の配列になります。

my_process = !ls -l
print(my_process)

下図は実行例です。

シェルコマンドの実行例
シェルコマンドの実行例

中身がわからないデータの先頭5行を表示させるには以下のようにします。anscombe.jsonはColaboratoryに標準添付されているsample_dataの一つです。

!cat sample_data/anscombe.json | head

subprocessモジュール、osモジュールによるUbuntuコマンドの実行

以下のコマンドの中で、3行目の’ls -l‘のシングルクォーテーション内をお望みのUbuntuコマンドに置き換えて実行してください。subprocessモジュール内での実行ですので、実行終了後の影響はpythonの実行環境には及びません。つまり、’cd ..‘などを実行しても、pythonの作業ディレクトリは変更されません。

from subprocess import run, PIPE
my_process = run(
    'ls -l',
    shell=True,
    stdout=PIPE, stderr=PIPE
)
print(my_process.stdout.decode(), my_process.stderr.decode())

一方、osモジュールをインポートして以下のコマンドを実行すると、pythonでも作業ディレクトリが変更されます。

import os
os.chdir('..')

osモジュールはUbuntuコマンドそのものではなく、一部のUbuntuコマンドの機能を模した関数です。getcwd, listdir, rename, makedirs, remove, rmdir, walkなどが使えます。詳しくは「osモジュール」などの言葉でネットを検索してください。

思わぬ副作用が生じる危険性があるため、現在はosではなくsubprocessの使用が推奨されています。何をしているのか理解した上で必要最小限の利用にとどめてください。

下図はsubprocessモジュール、osモジュールの実行例です。pwdは現在の作業ディレクトリ表示コマンドです。

subprocess/osモジュールの実行例
subprocess/osモジュールの実行例

お役に立てれば幸いです。 Have fun!

コメント

タイトルとURLをコピーしました