5

偶然にも、Pythonコード内から実際のディレクトリを変更できないことがわかりました。私のテストプログラムは次のとおりです。

from os import system

def sh(script):
    system("bash -c '%s'" % script)

sh("cd /home")
sh("pwd")

の出力はでpwdはなく/home、上記のコードが存在するディレクトリです。

誰かがこれが起こる理由を説明できますか?

4

5 に答える 5

6

問題は、実際にディレクトリを変更するのではなく、シェルコマンドを実行することですos.chdir()

os.system()呼び出しは、指定されたコマンドを新しいシェルで実行するため、スクリプトの作業ディレクトリはまったく影響を受けません。

于 2012-12-05T20:55:43.047 に答える
5

ディレクトリは実際には変更されますが、別のプロセスでは、スクリプトの子です。覚えておくべき単純なルールが 1 つあります。子は親の環境 (PATH、CWD など) に影響を与えることはできません。

于 2012-12-05T20:55:09.453 に答える
3
sh("cd /home")
sh("pwd")

^ これにより、2 つの別個のシェルが生成されます。試してください:

sh("cd /home; pwd")
于 2012-12-05T20:55:51.857 に答える
2

sh 関数を実行すると、現在のディレクトリを変更して終了する新しい bash プロセスが生成されます。次に、最初の bash プロセスに何が起こったのかをまったく知らない新しいプロセスを生成します。現在のディレクトリは、現在のユーザーのホーム ディレクトリに設定されます。
Python プロセスの現在の作業ディレクトリを変更するには

os.chdir("blah")`
于 2012-12-05T20:56:54.737 に答える
1

sh( )呼び出しは異なるシェルを生成しているため、python ではなくシェルの作業ディレクトリに影響を与えています。pythons の作業ディレクトリを変更するには、次を使用します。chdir()

于 2012-12-05T20:56:50.190 に答える