サーバーでubuntuを使用しています。
2人のユーザーがいます。user1とuser2にします。
各ユーザーには、必要に応じてアクセス許可が設定された独自のプロジェクトフォルダーがあります。ただし、user1は、他のユーザーのプロジェクトフォルダーにあるPythonスクリプトを実行する必要があります。これに使用subprocess.Popen
します。Pythonファイルにはアクセス許可が必要なので、そのスクリプトを呼び出すのに問題はありません。ただし、ログファイル(user2のアクセス許可があります)は、許可拒否エラーを引き起こします(使用する必要のあるユーザーではなく、他のユーザーに属しているため)。
だから私はユーザーを変更しようとしました
Popen("exit", shell=True, stdin=sp.PIPE, stdout=sp.PIPE, stderr=sp.PIPE) #exit from current user, and be root again
Popen(["sudo", "user2"], shell=True, stdin=sp.PIPE, stdout=sp.PIPE, stderr=sp.PIPE)
Popen("/usr/bin/python /some/file/directory/somefile.py param1 param2 param3", shell=True, stdin=sp.PIPE, stdout=sp.PIPE, stderr=sp.PIPE)
しかし、2番目Popen
は失敗します
su:ターミナルから実行する必要があります
Pythonシェル内でユーザーを変更する方法はありますか?
PS:いくつかの理由により、ログファイルに関するユーザー権限を変更できません。他のユーザーに切り替える方法を見つける必要があります...
編集:私は物事を明確にするためにいくつかの説明をする必要があります...
2つの異なるdjangoプロジェクトを実行しています。各プロジェクトにはユーザーがあり、各プロジェクトのコードとログが保存される独自のユーザーフォルダーがあります。
ここで、場合によっては、project1からprojet2にデータを転送する必要があります。私にとって最も簡単な方法は、パラメーターを受け入れ、2番目のプロジェクトで関連するジョブ[データ挿入]を実行するPythonスクリプトを作成することです。
したがって、project1内でいくつかの特定の関数が呼び出された場合、project2プロジェクトフォルダーにあるpyスクリプトを呼び出して、2番目のプロジェクトでデータ更新を実行できるようにします。
しかし、これPopen
はproject1内で呼び出すため、現在のユーザーはuser1です。しかし、私のスクリプト(project2にあります)には、アクセス許可のために私を拒否したいくつかのログファイルがあります...
だから、どういうわけか、私はuser1からuser2に切り替える必要があります。そうすれば、パーミッションの問題が発生せず、Pythonファイルを呼び出すことができます。または、これを行う別の方法を見つけてください。