11

それが私のセットアップです:

PostgreSQL/PostGIS データベースを実行している VirtualMachine (Ubuntu 14.04.LTS) があります。

QGIS の Windows 7 を使用して、このデータベースに接続し、フィーチャ レイヤーを GIS プロジェクトに読み込みます。

いくつかの Python コードを使用して、タイル ID といくつかの情報を含むファイルを作成します。

import os
import io
import time

layer=None
for lyr in QgsMapLayerRegistry.instance().mapLayers().values():
if lyr.name() == "fishnet_final":
    layer = lyr

for f in layer.selectedFeatures():
    pth = os.path.join(os.path.dirname(r'H:\path_to_file\'), str(f['name']) + "_" + str(time.strftime("%Y-%m-%d")) + "_" + str(f['country']) + ".txt")
    fle = open(pth,'wb')    
    fle.writelines(str(f['name']))
    fle.write('\n')
    fle.write(str(time.strftime("%Y-%d-%m")))
    fle.write('\n')
    fle.write(str(f['country']))
    fle.write('\n')
    fle.close()
    os.rename(pth, pth.replace(' ', ''))

ファイルには次の権限があります。

-rwx------

自分のグループと他のグループにも同じ権限を設定したい。

-rwxrwxrwx

私は試した:

import shlex
command=shlex.split("chmod 777 r'H:\path_to_file\file.txt'") 
subprocess.call(command)

失敗。

機能していたのは次のとおりです。

command=shlex.split("touch r'H:\path_to_file\file.txt'")

また

command=shlex.split("rm r'H:\path_to_file\file.txt'")

chmod コマンドが機能しないのはなぜですか?

UNIX では、このファイルを chmod できます。私は Windows と同じユーザーです。

os.chmod メソッドも試しました。しかし、成功しません。

import os, stat
st = os.stat(r'H:\path_to_file\file.txt')
os.chmod(r'H:\path_to_file\file.txt', st.st_mode | 0o111 )

アップデート

UNIX (Solaris) で「chmod 777 ファイル」を実行すると、パーミッションは

-rwxrwxrwx

今できることは、GIS プロジェクトの Windows で権限をダウングレード/削除することです。

subprocess.call(r'chmod 400 "H:\path_to_file\file.txt"', shell=True)
0
-r-xr-xr-x

このコマンドを使用する0と、Python コンソール出力にフィードバックが表示されます

新しいファイルで chmod 777 を実行すると、フィードバックも得られ0ますが、何も起こりません。

問題は、権限をダウングレードすることしかできないことです。新しい権限を設定できません!

4

3 に答える 3

2

これを試してください (テストするための Linux マシンが今のところありません):

import subprocess
subprocess.call(r'chmod 777 "H:\path_to_file\file.txt"', shell=True)

ファイル名がユーザー指定の場合はshell=True、セキュリティ上の理由から避ける必要があります。あなたは試すことができます:

filename = r"H:\path_to_file\file.txt"
subprocess.call(['chmod','777',filename])
于 2016-01-06T11:16:40.913 に答える