私はjsmin.cをダウンロードしてコンパイルし、それをターミナルからのjavascriptファイルで実行しました。これはうまくいくようです。しかし、os.system()やos.popen()をpythonスクリプト(同じ入力ファイル)で呼び出すと、出力ファイル(jsファイルの縮小版)が切り捨てられます。サブプロセスが終了する前にフラッシュされないか、jsminが早期に終了したかのように、ディスクバッファリングなどで何かが起きているかのように見えます。なぜ、jsminはPythonのサブプロセスで実行すると早く終了するのですか?
しかし、これらの事柄のどれもそうではないようです。 exit値は、出力が切り捨てられてもmain()から返されたもので、fflush(stdout)への呼び出しを追加しても何の違いもなく、jsminを呼び出した後に同じサブシェル内からsyncを呼び出すと、任意の違い。
私はputput()への呼び出しをfputc()への呼び出しで置き換えようとしましたが、最初は問題を解決したように見えましたが、それは不可解なことではありません。確実に起こる。 Bizare?
私はjsmin.cでいくつかの問題があると言いますが、プログラムはコマンドラインから実行すると同じ入力ファイルで正常に動作するので、Pythonのサブプロセスから実行することと関係があります。
ここに私のサブプロセスの呼び出しです:
result = os.system('jsmin < ' + tpathname + ' > ' + tpathname + '.min')
(。私はパスでjsminを入れている、それが実行されている、私は.minファイルに予想される結果のほとんどを得る)
でき、誰もがこの問題の原因は何か想像してみてください。
あなたはシェルから直接から実行したときに 'jsmin jsfile.min'コマンドが正常に動作することを言っていますか? 'os.system()'がシェルをフォークするので、_jsmin_の実行環境はどちらの場合もほぼ同じになるはずです。 –
C2H5OH
はい、それは私が言っていることです。私はshebangで始まるjsminを実行するシェルスクリプトを作成しようとしました。そのシェルスクリプトは端末からは動作しますが、Pythonからは起動しません。 WTF? – Shavais
私はenvをシェルスクリプトからファイルに書き出して、pythonサブプロセスから実行してシェルから実行する間のenvの違いを検出できるかどうかを調べました。唯一の違いは、3ではなくSHLVL = 4であり、PWDは異なっています。それだけです、それ以外のものはまったく同じです。 – Shavais