これは私のスクリプトです。
#!/usr/bin/python
import os
print "hello world from python"
os.system("echo 'hello world from bash'")
os.system("umask 055")
os.system("ls -alh > test")
このコードを実行すると、test ファイルに対する権限が 722 ではなく 600 に設定されます。なぜですか?
私の殻のUmaskは0077です。
答え1
umask
これを実行すると、system
シェルで実行されます。umask
そのシェルのマスクは変更されますが、シェルはすぐに終了し、変更は失われます。
Pythonプロセスのumaskを変更するには、使用os.umask()
、こうなります:
現在の数値umaskを設定し、古いumaskを返します。
これにより、すぐに終了する他のプログラムではなく、実行中のプログラムが変更されます。
答え2
これは完全に正常な動作ですが、目的の動作ではない可能性があります。
これらumask 055
の設定は呼び出し全体にわたって持続するため、 os.system
Pythonスクリプトの設定は変更されず、os.system()
次の呼び出しで呼び出されるコマンドの設定も変更されません。
あなたがしなければならないことはこれです:
import os
old_mask = os.umask(055)
os.system("ls -alh > test")
os.umask(old_mask)
答え3
特定の権限でデフォルトのシェルコマンドを実行するには、単一のシステムコールでコマンドをリンクするだけです。
os.system("umask 055")
os.system("ls -alh > test")
になる:
os.system("umask 055; ls -alh > test")
または、前のコマンドが正常に終了した場合、2番目のコマンドを実行したい場合:
os.system("umask 055 && ls -alh > test")