5

os.system()Windowsコマンドラインシェルの実行に使用しています。Windows cmd の現在のディレクトリを変更したいと思います。これを行う1つの方法は次のとおりです。

os.chdir('newPath')

ただしchdir()、実際の Python の現在の作業ディレクトリも変更されます。スクリプトの他の部分を元の現在の作業ディレクトリで実行したいので、実際の Python 作業ディレクトリを変更したくありません。変更したいのは、Windows cmd の現在の作業ディレクトリのみです。言い換えればos.system()、コマンドを 1 つの現在の作業ディレクトリ (Windows cmd の現在の作業ディレクトリ) で実行し、それ以外は別の現在の作業ディレクトリ (実際の Python の現在の作業ディレクトリ) で実行する必要があります。

Windows cmd の現在のディレクトリのみを変更する別の試みを次に示します。

os.system('cd newPath')

ただし、コマンドの実行直後にcd newPathWindows cmd の現在のディレクトリがリセットされるため、明らかに機能しません (次の呼び出しで同じ Windows コマンド シェルを使用しないためos.system())。

Windows cmd シェル用に別の現在の作業ディレクトリを持つことは可能ですか? (実際の現在の作業ディレクトリとは別)。

4

3 に答える 3

7

モジュールはsubprocessを置き換えるものos.systemです。

とりわけ、生成されたプロセスの作業ディレクトリを指定する引数をsubprocess.Popen()取る を提供します(まさにあなたの状況に合わせて)。cwd

参照: http://docs.python.org/library/subprocess.html

使用例の置き換えos.system:

p = subprocess.Popen("yourcmd" + " yourarg", shell=True, cwd="c:/your/path")
sts = os.waitpid(p.pid, 0)[1]
于 2011-02-03T00:01:15.520 に答える
1

Windows でのみ動作する必要がある場合、1 つの方法は次のとおりです。

os.system('start /d newPath cmd')
于 2011-02-02T23:52:14.110 に答える
1

を使用する場合os.system、同じコマンド シェルを再利用するのではなく、要求ごとに新しいコマンド シェルを生成します。これは、その変更が呼び出し間で伝播することを実際に期待できないことを意味します。

ただし、コマンドを起動する前に、必要なディレクトリに常に変更されるラッパーを作成することもできます。

于 2011-02-02T23:53:11.893 に答える