2012-05-10 7 views
7

अजगर में (2.7 में यह कोशिश की और नीचे) यह tempfile.NamedTemporaryFile उपयोग कर बनाई गई एक फ़ाइल की तरह लग रहा umask निर्देश का पालन करना प्रतीत नहीं होता:क्या मैं python में tempfile.NamedTemporaryFile के लिए umask सेट कर सकता हूं?

import os, tempfile 
os.umask(022) 
f1 = open ("goodfile", "w") 
f2 = tempfile.NamedTemporaryFile(dir='.') 
f2.name 

Out[33]: '/Users/foo/tmp4zK9Fe' 

ls -l 
-rw------- 1 foo foo 0 May 10 13:29 /Users/foo/tmp4zK9Fe 
-rw-r--r-- 1 foo foo 0 May 10 13:28 /Users/foo/goodfile 

किसी भी विचार क्यों NamedTemporaryFile umask लेने नहीं होगा? फ़ाइल निर्माण के दौरान ऐसा करने का कोई तरीका है?

मैं हमेशा os.chmod() के साथ इसे काम कर सकता हूं, लेकिन मैं कुछ ऐसा करने की उम्मीद कर रहा था जो फाइल निर्माण के दौरान सही काम करता था।

उत्तर

22

यह एक सुरक्षा सुविधा है। NamedTemporaryFile हमेशा मोड 0600 के साथ बनाया गया है, tempfile.py, line 235 पर हार्डकोड किया गया है, क्योंकि यह आपके प्रक्रिया के लिए निजी है जब तक कि आप इसे chmod के साथ खोलें। इस व्यवहार को बदलने के लिए कोई कन्स्ट्रक्टर तर्क नहीं है।

+2

धन्यवाद - होगा एक जवाब है कि में एक विशिष्ट लाइन के लिए लिंक प्यार स्रोत! – shreddd

+0

आपके उत्तर के लिए धन्यवाद। मैं बस ध्यान दूंगा कि यह विचित्र है, अन्यथा मैं जो चाहता हूं उसे करने का एक और तरीका याद कर रहा हूं। मैं बस एक नामांकित समकालीन फ़ाइल का उपयोग करने के लिए तैयार हूं, इसलिए अगर मैं इसे उत्पन्न करने में त्रुटियों में भाग लेता हूं, तो इसे इसे फेंक सकता हूं, लेकिन इसे सफलतापूर्वक उस फ़ाइल में ले जाया जा सकता है जिसे मैंने अन्यथा सादे खुले (नाम, 'डब्ल्यू ") के साथ बनाया हो। लगता है एक फीचर अनुरोध की तरह कहा जाता है .... – nealmcb

2

मामले में यह किसी की मदद कर सकते हैं में, मैं और अधिक या कम एक ही बात करना चाहता था, यहाँ कोड मैं का इस्तेमाल किया है है:

import os 
from tempfile import NamedTemporaryFile 

def UmaskNamedTemporaryFile(*args, **kargs): 
    fdesc = NamedTemporaryFile(*args, **kargs) 
    umask = os.umask(0) 
    os.umask(umask) 
    os.chmod(fdesc.name, 0o666 & ~umask) 
    return fdesc 
+1

बस जो मैं चाहता था! निम्न स्तर की नलसाजी को छेड़छाड़ करने के लिए आपको बहुत बहुत धन्यवाद, हमें करने के लिए मजबूर किया जाता है! :) – nealmcb

संबंधित मुद्दे