サブプロセスを扱う場合、作業ディレクトリを変更すると課題が生じます。この問題は、サブディレクトリまたはスーパーディレクトリ内を移動しようとすると発生します。ただし、重要なのは、プログラムの呼び出しとコマンドの実行の違いを理解することです。
コード内で、「cd」という名前のプログラムを呼び出そうとしていますが、これは無効なアプローチです。代わりに、「cd」という名前のコマンドを呼び出す必要があります。
エラーの説明:
「subprocess.call(['cd ..'])」ステートメント「cd」はシェル内部であるため、OSError がトリガーされます。したがって、次の変更に示すように、シェル内で実行する必要があります:
subprocess.call('cd ..', shell=True)
Why "shell=True" is Pointless:
にもかかわらず見かけ上の修正ですが、「shell=True」を使用するのは実際には無意味です。これは、どのプロセスも別のプロセスの作業ディレクトリを変更できないためです。つまり、サブシェルはディレクトリを変更してすぐに終了します。
代替解決策:
作業ディレクトリを正常に変更するにはサブプロセスを実行する前に、別の方法を利用できます:
「os.chdir()」の使用:
wd = os.getcwd() os.chdir("/destination/directory") subprocess.Popen("ls") os.chdir(wd)
「サブプロセス」での「cwd」パラメータの使用:
subprocess.Popen("ls", cwd="/destination/directory")
これらの代替アプローチを使用すると、サブプロセスを実行する前に作業ディレクトリを指定できます。コマンドが目的のディレクトリ内で実行されるようにします。
以上がPython でサブプロセスの作業ディレクトリを変更するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。