#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
for ADAPTER in 0 1 2 3 ; do
NEW_ADAPTER=`expr $ADAPTER + 20`
mkdir /dev/dvb/adapter$NEW_ADAPTER
chown root:root /dev/dvb/adapter$NEW_ADAPTER
chmod 0755 /dev/dvb/adapter$NEW_ADAPTER
/usr/bin/nice --4 /usr/local/bin/fuse_b25 --target \
/dev/dvb/adapter$ADAPTER /dev/dvb/adapter$NEW_ADAPTER \
-o allow_other
done
exit 0
上のシェルスクリプトを、pythonで書けるかやってみました。
このシェルスクリプトは、アースソフトのpt3カードに
使うものです。
ドライバーがインストールされていれば、
カードは、自動的に/dev/dvb/に、apdapter0からapdapter3まで
のデバイスフォルダ(ファイル入り)を生成します。
同じ場所に、+20した番号付きデバイスフォルダを4つ生成し、
ファイルへの権限を設定。続いて、
fuse_b25という実行ファイルを使って、それぞれ
adapter0はadapter20に、adapter1はadapter21に、
というふうに、fuse_b25の実行結果を
+20したデバイスフォルダ(と中身のファイル)に
渡すという流れになっています。
これをpython化してみようとしたのですが、
最後の、fuse_b25が出てくるところのlinuxコマンドを
実行させるやり方がわかりませんでした。その手前でも
エラーが出たりして、、、。
シェルスクリプト側にある、exprは、
計算しろ、みたいなコマンドのようなのですが、
私は、これの解釈が正しくできていないのかもしれません。
pythonで
#!/usr/bin/env python3
import os
os.chdir('/dev/dvb')
for ADAPTER in [0,1,2,4]:
for num in [20,21,22,23]:
dirname = 'adapter' + str(num)
os.makedirs(dirname)
os.chown(dirname, 0, 0)
os.chmod(dirname, 0o755)
と途中までそれっぽくやってみて、実行してみると、
Traceback (most recent call last):
File "/home/user/rc.local.py", line 10, in
os.makedirs(dirname)
File "/usr/lib/python3.9/os.py", line 225, in makedirs
mkdir(name, mode)
FileExistsError: [Errno 17] File exists: 'adapter20'
というようなご指摘が出まして、アタマが止まってしまいました。
フォルダは生成されたのですが、まだfuse_b25以前の問題で
ひかかっています。したがって、
生成されたadpter20〜23のアダプタフォルダは、空です。
すでにフォルダが在る、って云われても、
あるわけなかったはずなのですが。
のっけから牛歩の歩みを強いられました。
まあ、気楽に一日3時間を限度に、勉強していこうと
いまのところは思っています。
↓ ↓ ↓ ↓
os.makedirs(dirname) を
os.makedirs(dirname, exist_ok= True) に変更して、
エラーなしになりました。
あとは、ややこしいlinuxコマンドを入れ込むだけですが、
むずかしそうですね。