तुम हमेशा टर्मिनल खोल से ऐसा कर सकते हैं, यह चल रहा है, chmod
उपयोग करने से पहले:
chmod a+x my_script.sh
आप अजगर से यह करने के लिए चाहते हैं, आप os
मॉड्यूल में या तो chmod
या fchmod
उपयोग कर सकते हैं। आप पहले से ही फ़ाइल खोल रखी है, के बाद से, मैं बाद करना चाहते हैं:
with open("my_script.sh", "w") as fd:
fd.write("#!/bin/sh\n")
fd.write("echo $PATH\n")
os.fchmod(fd.fileno(), stat.S_IRWXU | stat.S_IRWXG | stat.S_IROTH | stat.S_IXOTH)
दुर्भाग्य से, जैसा कि आप देख सकते हैं, वहाँ जबकि बाकी अकेला छोड़ देगा हर किसी के लिए x
ध्वज जोड़ने chmod a+x
के लिए कोई सीधा बराबर है। लेकिन अगर आप एक ही बात chmod
कमांड लाइन उपकरण वास्तव में करता है कर सकते हैं: stat
फ़ाइल (इस मामले में या,, fstat
) मौजूदा अनुमतियां प्राप्त करने में है, तो उन्हें संशोधित:
with open("my_script.sh", "w") as fd:
fd.write("#!/bin/sh\n")
fd.write("echo $PATH\n")
mode = os.fstat(fd.fileno()).st_mode
mode |= stat.S_IXUSR | stat.S_IXGRP | stat.S_IXOTH
os.fchmod(fd.fileno(), stat.S_IMODE(mode))
(आप नहीं करते वास्तव में S_IMODE
अधिकांश प्लेटफार्मों पर कदम की आवश्यकता है, क्योंकि st_mode
में कोई अतिरिक्त बिट्स नहीं है, या (एफ) chmod
हानिरहित रूप से उन्हें अनदेखा करता है-ओएस एक्स करता है। लेकिन सही कोड करना बेहतर है, अपना कोड पोर्टेबल और भविष्य बनाने के लिए -प्रूफ।)
अधिकांश लोग S_IXUSR
जैसे "दोस्ताना" नामों को विशेष रूप से अनुकूल नहीं मानते हैं, और एक बार आप अष्टाधारी मामले में मोड के बारे में सोचना सीखना यह वास्तव में कैसे POSIX बातें abbreviates याद करने की कोशिश कर की तुलना में आसान है, तो आप इस पसंद कर सकते हैं:
with open("my_script.sh", "w") as fd:
fd.write("#!/bin/sh\n")
fd.write("echo $PATH\n")
mode = os.fstat(fd.fileno()).st_mode
mode |= 0o111
os.fchmod(fd.fileno(), mode & 0o7777)
111
उपयोगकर्ता, समूह, और अन्य द्वारा निष्पादन का मतलब है (एक ही विभिन्न ST_IX*
बिट्स के |
की बात), और 7777
उन सभी बिट्स हैं जिन्हें आपको पास करने की अनुमति है (एफ) chmod
(वही बात जो S_IMODE
करता है)।
फ़ाइल में उचित अनुमतियां सेट करने के लिए उपप्रोसेसर का उपयोग करें - http://docs.python.org/2/library/subprocess.html – theharshest
@thehesthest: आप 'subprocess' के साथ ऐसा कैसे करेंगे? (मुझे लगता है कि आप 'check_call (['chmod', 'a + x', 'myscript.sh']) 'वैसे ही कर सकते हैं, उसी तरह से आप' check_call (['echo', 'foo'])' ' 'प्रिंट ('foo')' 'यदि आप वास्तव में चाहते हैं, लेकिन ... क्यों?) – abarnert