あなたはいつもchmod
を使用して、それを実行する前に、ターミナルのシェルからこれを行うことができます。
chmod a+x my_script.sh
あなたは、Pythonからそれを実行したい場合は、あなたが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))
(あなたがいませんst_mode
に余分なビットがないか、または(f)chmod
が無害に無視されるため、ほとんどのプラットフォームでS_IMODE
ステップが実際に必要です(OS Xのように無害に無視します)。
ほとんどの人は、フレンドリーな名前をS_IXUSR
のように特に親切ではないと考えていますが、 (同じ
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
は、ユーザー、グループ、およびその他によって実行意味:あなたはオクタル面でのモードを考えることを学ぶたら、それはPOSIXは物事を略記する方法を覚えしようとするよりも、実際に簡単ですので、あなたはこれを好むことそのようなものはST_IX*
ビットのビットの|
)、そして7777
は、(f)chmod
(これはS_IMODE
と同じもの)に渡すことができます。
サブプロセスを使用してファイルへの適切なアクセス許可を設定する - http://docs.python.org/2/library/subprocess.html – theharshest
@theharshest: 'サブプロセス 'でどのようにしますか? (check_call(['chmod '、' a + x '、' myscript.sh ']) 'と同じ方法で' check_call([' echo '、' foo ']) 'を実行することができますあなたが本当にしたい場合は 'print( 'foo')'の、なぜ...?) – abarnert