jsmin.cをダウンロードしてコンパイルし、ターミナルからjavascriptファイルで実行しましたが、うまく機能しているようです。しかし、Pythonスクリプト(同じ入力ファイル上)でos.system()またはos.popen()呼び出しから呼び出すと、出力ファイル(jsファイルの縮小バージョン)は、stdoutがそうであるかのように切り捨てられます。サブプロセスが終了する前にフラッシュされない、またはjsminが早期に終了したかのように、あるいはディスクバッファリングなどで何かが起こっているかのように。
しかし、それらのことはどれも当てはまらないようです。終了値は、出力が切り捨てられている場合でもmain()から返すものであり、fflush(stdout)の呼び出しを追加しても違いはなく、jsminを呼び出した後に同じサブシェル内からsyncを呼び出しても効果はありません。違いはありません。
putc()の呼び出しをfputc()の呼び出しに置き換えてみましたが、最初は問題が解決したように見えましたが(なんらかの理由で?)、不可解なことに、問題が再び発生し始め、現在は確実に発生しています。ビザレ?
jsmin.cには問題があると思いますが、プログラムはコマンドラインから実行すると同じ入力ファイルで正常に動作するため、Pythonサブプロセスから実行することと関係があります。
これが私のサブプロセス呼び出しです:
result = os.system('jsmin < ' + tpathname + ' > ' + tpathname + '.min')
(パスにjsminを入れて実行しているので、期待される結果のほとんどが.minファイルで取得されます。)
誰かがこの問題を引き起こしている可能性があるものを想像できますか?