私は繰り返し遭遇しているエラーを抱えています。悲しいことに、サイトで解決策を見つけることができません。ラインもののmkdirとtouchサブプロセスを順番に使用しても動作しない
try:
#create working dir if it doens't exist already
if not os.path.isdir(WORKINGDIR):
print '>>>mdkir ',WORKINGDIR
subprocess.Popen(['mkdir',WORKINGDIR]).wait()
print os.path.isdir(WORKINGDIR)
#create output csv file
outputCSVFile = WORKINGDIR+ '/'+'results.csv'
if not os.path.isfile(outputCSVFile):
print '>>> touch',outputCSVFile
subprocess.check_output(['touch',outputCSVFile])
:私はsubprocess.checkoutput
の代わりsubprocess.Popen().wait()
を使用する場合
touch: cannot touch `/nfs/iil/proj/mpgarch/archive_06/CommandsProfiling/fastScriptsOutput190916/results.csv': No such file or directory
同じエラーが表示されない:常にTrue
、subprocess
このエラーを返し出力します。 この問題は、(ディレクトリやファイルを作成するためにos
メソッドを使用するなどして)さまざまな方法で解決できますが、なぜ私の方法が機能していないのか興味があります。
ありがとうございます。
EDIT:問題はおそらくsubprocess.Popen
の後にプログラムが高速すぎて、subprocess.checkoutput
を使用して問題が解決されます(出力を待つ必要があるため)。しかし、まだ何が起こっているのか分かりません。は、実行される行に進む前に、ディレクトリが作成されたことを示しています。touch
私は考えることができる唯一のことは、ラインに沿ってどこかにキャッシュすることで発生する競合状態である
は、ディレクトリを作成します。おそらく、ディレクトリ作成は数分の1秒間延期されるでしょう。おそらく、 'subprocess.checkoutput'を介した出力のストリーミングによって、ディレクトリが作成されるのに十分な遅延が生じます。単純なチェックは、壊れたバージョンで意図的な待機を追加し、それが修正されているかどうかを確認することです。もちろん、メソッドがシェルを別の方法で呼び出すのではなく、エッジケースを経験しているとは言えません。うまくいけば、もっと知識のある人がその1つに当てることができます – Basic私はあなたが正しいと信じており、これが原因です。 – DorHugi