我已经下载并编译了 jsmin.c,并在终端的 javascript 文件上运行它,它似乎工作得很好。但是当我从 python 脚本中的 os.system() 或 os.popen() 调用中调用它时(在同一个输入文件上),输出文件(js 文件的缩小版本)被截断,就好像 stdout 是在子进程退出之前没有被刷新,或者好像 jsmin 提前终止了,或者好像磁盘缓冲发生了什么事情。
但这些事情似乎都不是这样。退出值是我从 main() 返回的任何值,即使输出被截断,添加对 fflush(stdout) 的调用没有任何区别,并且在调用 jsmin 后从同一个子 shell 中调用 sync 不会使任何区别。
我尝试用对 fputc() 的调用替换对 putc() 的调用,起初它似乎解决了问题(出于某种深不可测的原因?),但随后,莫名其妙地,问题又开始发生,现在可靠地发生了。离奇?
我会说这是 jsmin.c 的一些问题,但是当从命令行运行时,该程序在同一个输入文件上运行良好,因此它与从 python 子进程运行它有关。
这是我的子流程调用:
result = os.system('jsmin < ' + tpathname + ' > ' + tpathname + '.min')
(我已将 jsmin 放在路径中,并且它正在运行,我在 .min 文件中获得了大部分预期结果。)
谁能想象导致这个问题的原因是什么?