偶然にも、Pythonコード内から実際のディレクトリを変更できないことがわかりました。私のテストプログラムは次のとおりです。
from os import system
def sh(script):
system("bash -c '%s'" % script)
sh("cd /home")
sh("pwd")
の出力はでpwd
はなく/home
、上記のコードが存在するディレクトリです。
誰かがこれが起こる理由を説明できますか?
問題は、実際にディレクトリを変更するのではなく、シェルコマンドを実行することですos.chdir()
各os.system()
呼び出しは、指定されたコマンドを新しいシェルで実行するため、スクリプトの作業ディレクトリはまったく影響を受けません。
ディレクトリは実際には変更されますが、別のプロセスでは、スクリプトの子です。覚えておくべき単純なルールが 1 つあります。子は親の環境 (PATH、CWD など) に影響を与えることはできません。
sh("cd /home")
sh("pwd")
^ これにより、2 つの別個のシェルが生成されます。試してください:
sh("cd /home; pwd")
sh 関数を実行すると、現在のディレクトリを変更して終了する新しい bash プロセスが生成されます。次に、最初の bash プロセスに何が起こったのかをまったく知らない新しいプロセスを生成します。現在のディレクトリは、現在のユーザーのホーム ディレクトリに設定されます。
Python プロセスの現在の作業ディレクトリを変更するには
os.chdir("blah")`
各sh( )
呼び出しは異なるシェルを生成しているため、python ではなくシェルの作業ディレクトリに影響を与えています。pythons の作業ディレクトリを変更するには、次を使用します。chdir()