問題タブ [mkstemp]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - mkstemp() によって返された Python 一時ファイルを自動的に閉じる方法はありますか
通常、HTTP 経由でリソースをダウンロードするためのこのチャンクのように、with ステートメントを使用して Python でファイルを処理します。
ただし、これはファイル名を知っていることを前提としています。を使用したいとしますtempfile.mkstemp()
。この関数は、開いているファイルとパス名へのハンドルを返すためopen
、with
ステートメントで使用するのは正しくありません。
少し調べてみたところ、mkstemp
適切に使用するように注意することについて多くの警告が見つかりました。によって返された整数を捨てないでくださいと言うと、いくつかのブログ記事が叫びそうになりましたmkstemp
。OS レベルのファイルハンドルが Python レベルのファイル オブジェクトと異なるという議論があります。それは問題ありませんが、それを保証する最も単純なコーディング パターンを見つけることができませんでした。
mkstemp
書き込まれるファイルを取得するために呼び出されます- 書き込み後、例外が発生した場合でも、Python ファイルとその下にある os ファイルハンドルは両方ともきれいに閉じられます。
with(open...
これはまさに、パターンで得られる種類の動作です。
だから私の質問は、おそらく別の種類の with ステートメントを使用して、生成されたファイルを作成して書き込むための Python での良い方法はありますか、それともormkstemp
などを手動で行う必要がありますか?このためのパターン。fdopen
close
python - マルチスレッドで #Fabric put# を使用して、tempfile.mkstemp によって作成された一時ファイルをリモート ファイルにコピーすると、ファイルが見つかりません
Python バージョン: 2.6.4
生地のバージョン:1.9.0
threading.Thread(私の場合は3つのスレッド)を使用して、ケースを並行して実行する自動化テストフレームワークがあります。
各スレッド ワーカーは、fabric put (ただし、この関数にはラッパーを実行します) を使用して、tempfile.mkstemp によって作成された一時ファイルをリモート ファイルにコピーします。
問題は、ファイルが見つからないというエラーが常に表示されることです。エラーは、例外のヒントからの「プット」中に発生します。
「put」を実行するときのコードは次のとおりです。
MyShell.py(MyFabShell の親クラス)
MyFabShell.py:
put を呼び出すと、エラーが発生します。
私は当初、ファイルが の間に削除されるのではないかと疑っていたput
ので、コメントしos.remove
ました。しかし、再び同じエラーが発生しました。例外ログから、ファブリック get/put の実行前に例外がスローされるため、「fabric put」の問題ではないはずmkstemp
です マルチスレッドが関係している場合は安全ではありませんか? しかし、ドキュメントには「ファイルの作成に競合状態はありません」と書かれていますか、それともGILが原因で私のケースは失敗しますか? これは、スレッドを 1 つだけ使用するとすべてがうまくいくためだと思われます。
誰かが私のエラーの手がかりを教えてくれますか? 私はしばらくの間、問題に苦しんでいます:(
c - mkstemp 関数の暗黙の宣言
関数に問題がありますmkstemp()
。GCC コンパイラでcygwin
警告が生成されます。
GCC フラグ:-std=c99 -Wall
内容:
python - Python: os.tmpfile または tempfile.mkstemp
外部構成ファイルを開いて、エディターでユーザーに表示したいと考えています。
私が考えている解決策は、一時ファイルを作成し、元のファイルの内容をそこにコピーすることです。一時ファイルは、ユーザーがデフォルトのエディターで編集するために開かれます。誤った構成が元のファイルに書き込まれることは決してないため、これはすべて行われます。
ユーザーが変更を保存してエディターを閉じると、Python スクリプトは変更が受け入れられるかどうかを確認し、受け入れられる場合にのみ元のファイルを上書きします。
私はいくつかの調査を行いましたが、Python で一時ファイルを作成するには 2 つの可能性があるようです。
と
それらの違いは何ですか?どちらがタスクに適していますか? またはこれを行うより良い方法はありますか?
ありがとう
c - mkstemp() で作成されたファイル名を取得する
への呼び出しからファイル名 (およびパス) を取得することは可能mkstemp()
ですか? 「はい」の場合、どのように?
c - 動的に割り当てられた文字列を使用して一時ファイルを作成できないのはなぜですか?
でログ エントリを含むディレクトリを作成しようとしていますmkstemp
。しかし、私の理解では、文字列定数を に渡してはいけませんmkstemp
。文字列にメモリを割り当てsnprintf
、動作すると思っていた出力をフォーマットするために使用しますが、mkstemp
EINVAL に errno を設定する負の値を返します。
ただし、Linuxのマニュアルには、次のmkstemp
ように明確に記載されています。
EINVAL mkstemp() および mkostemp() の場合: template の最後の 6 文字が XXXXXX ではありませんでした。現在、テンプレートは変更されていません。
さらにmkstemp
、動的文字列を変更することはありません。
このスニペットは両方の Linux マシンでエラーを吐き出しますが、動的に割り当てられた文字列を削除して明示的に設定fname
すると動作します
python - Python の mkstemp() ファイルへの書き込み
以下を使用して tmp ファイルを作成しています。
このファイルに書き込もうとしています:
確かに、ファイルを閉じて適切に実行しますが、tmpファイルをcatしようとすると、まだ空です..基本的に見えますが、なぜ機能しないのかわかりません.