3

私はosモジュールで新しいディレクトリを作成できることを知っています。しかし、私は次のようにサブプロセスモジュールを使用して新しいディレクトリを作成しようとしていました。

p=subprocess.Popen("mkdir extractions", shell=True)
os.chdir("extractions")

スクリプトを実行すると、ディレクトリ抽出が作成されますが、次のos.chdir呼び出しが失敗し、ディレクトリ抽出が存在しないことがわかります。次の行で作成されたディレクトリを認識できないサブプロセスを使用するという点で、何かが足りないことはわかっています。助けてください!

4

4 に答える 4

6

os.chdirp.wait()を呼び出す前に、mkdirが完了するのを待つために呼び出すことをお勧めします。または、さらに良い方法として、を使用(stdout, stderr) = p.communicate()して結果を確認します。

于 2012-05-04T02:56:11.777 に答える
1

os.mkdir("extractions") を使用しないのはなぜですか? subprocess.call("mkdir extracts") を使用することもできます。これらのメソッドは両方とも機能します。

p1 = subprocess.Popen('mkdir extractions', shell=True)
p1.communicate()

ただし、これは単に subprocess.call("mkdir extracts", shell=True) を使用するのと同じです。

于 2012-05-04T03:38:19.347 に答える
0

を呼び出す方が高速os.mkdirであり、その違いが実際にシステムに顕著な影響を与える可能性は低いですが、まったく新しいプロセスを作成し、まったく別のプログラムを実行するというオーバーヘッドが発生します。カーネルで関数を呼び出すだけでなく、終了したことを通知するのを待っています。

于 2012-05-04T03:53:22.313 に答える
0
>>> import os
>>> import subprocess
>>> p=subprocess.Popen("mkdir extractions", shell=True)
>>> os.chdir("extractions")

これは私にとってはうまくいきました(OSX上)。どのOSを実行していますか?os.popen を試しましたか?

于 2012-05-04T02:58:25.993 に答える