おそらく、以下を構成するコードを表示する必要があります。
[do some other code here that creates a file]
あなたが持っているコードは私のシステムでうまく機能します:
import os
oldmask = os.umask (022)
fh1 = os.open ("qq1.junk", os.O_CREAT, 0777)
fh2 = os.open ("qq2.junk", os.O_CREAT, 0022)
os.umask (oldmask)
os.close (fh1)
os.close (fh2)
次のようにファイルを生成します。
-rwxr-xr-x 1 pax pax 0 Apr 24 11:11 qq1.junk
---------- 1 pax pax 0 Apr 24 11:11 qq2.junk
umaskまた、ローカル操作に変更した場合の影響を最小限に抑える古い値の復元にも注意する必要があります。
上記の結果からわかるようにumask、ファイルの作成に使用しているモードから値が「減算」され、特定の場合にそのモードが何であるかがわからないことにも注意する必要があります。
モードのファイルを作成するときの値は、あなたが持っているものではなく、結果になるので、それはあなたのbashサンプルでも明らかです。umask022777r-xr-xr-xrw-r--r--
openではなく使用していることを示す以下のコメントに基づくos.openと、Pythonソースをざっと見ると、これが初期モードとしてfopen使用するC呼び出しに変換されることがわかります。0666これは、わずかに変更されたコードによってサポートされています。
import os
oldmask = os.umask (022)
fh3 = open ("qq3.junk", "w")
os.umask (0)
fh4 = open ("qq4.junk", "w")
os.umask (oldmask)
fh3.close()
fh4.close()
それは私たちに与えます:
-rw-r--r-- 1 pax pax 0 Apr 24 11:44 qq3.junk
-rw-rw-rw- 1 pax pax 0 Apr 24 11:44 qq4.junk
ですから、なぜあなたが0000あなたのケースで許可を得ているのか完全にはわかりません。
上記のプログラムを環境で実行すると、結果がどうなるかを確認する価値があります。それが私が得るのと同じなら、問題はどこかにあるかもしれません。