首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么jsmin在python子进程中运行时会提前退出?

为什么jsmin在python子进程中运行时会提前退出?
EN

Stack Overflow用户
提问于 2012-04-20 04:53:52
回答 1查看 232关注 0票数 2

我已经下载并编译了jsmin.c,并在终端的javascript文件上运行它,它似乎工作得很好。但是,当我从python脚本中的os.system()或os.popen()调用(在同一个输入文件上)时,输出文件( js文件的简化版本)被截断,就好像标准输出在子进程退出之前没有被刷新一样,或者好像jsmin提前终止了,或者好像磁盘缓冲之类的事情发生了。

但这些事情似乎都不是这样的。退出值是我从main()返回的值,即使在输出被截断时也是如此,添加对fflush(stdout)的调用没有任何区别,并且在调用jsmin之后从同一个子subshell中调用sync也没有任何区别。

我尝试将对putc()的调用替换为对fputc()的调用,一开始似乎解决了问题(出于某种难以理解的原因?),但是后来,令人费解的是,问题又开始发生了,现在可靠地发生了。怪异?

我想说这是jsmin.c的一些问题,但是当从命令行运行时,程序在相同的输入文件上工作得很好,所以它与从python子进程运行程序有关。

下面是我的子进程调用:

代码语言:javascript
复制
result = os.system('jsmin < ' + tpathname + ' > ' + tpathname + '.min')

(我已经将jsmin放入路径中,并且它正在运行,我在.min文件中获得了大部分预期结果。)

有人能想象是什么导致了这个问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-23 05:34:43

堆栈溢出让我在5个小时内不能回答我自己的问题,所以这个“答案”最初是作为编辑添加的。(它也不让我聊天,所以评论延伸了一下。)

我找到问题了。问题出在为jsmin创建输入文件然后对其调用jsmin的python程序。它正在创建一个文件,但无法关闭它,然后对它调用jsmin。因此,jsmin不会提前终止,也不会截断它的输出;相反,它正在操作(到目前为止)不完整的输入文件。(嗯。)

我早就意识到了这一点,除非python程序最终(通过退出)关闭了jsmin的输入文件,所以当我检查它时,它看起来是完整的。只是在jsmin处理它的时候它还没有完成。

这正是“with”成语的动机之一:

代码语言:javascript
复制
with open(targetpath, 'w+') as targetfile:
   ..code that writes to targetfile
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10236606

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档