我的自动缩小工具有一个奇怪的问题。我不得不用 csso 替换 yuicompressor,因为 yuicompressor 自 2013 年以来就没有更新过,并且在较新的 css 选择器上有很多错误。
这增加了复杂性(如涉及的“东西”的数量),以至于我不知道如何调试执行命令的问题。(或者即使它被执行了)。
我基本上已经将我的问题缩小到以下 python 代码片段(目前添加了许多调试语句来帮助诊断问题):
print("node " + os.path.join(getScriptPath(), "css", "csso", "bin", "csso")
+ " -i " + os.path.join(root, name) + " -o " + os.path.join(root, outname) + " --debug")
os.remove(os.path.join(root, outname))
try:
result = subprocess.check_output(["node",
os.path.join(getScriptPath(), "css", "csso", "bin", "csso"),
"-i", os.path.join(root, name),
"-o", os.path.join(root, outname),
"--debug"
], stderr=subprocess.STDOUT, shell=True)
except subprocess.CalledProcessError as exc:
print("ERROR: Failed to execute CSSO with error:", exc.returncode, exc.output)
请注意,这getScriptPath()
是一个小的帮助函数,它返回脚本文件所在的当前路径。csso
通过手动复制文件来安装css/csso/bin/csso
。name
是一个字符串,包含原始 css 文件的相对路径(通常类似于../../domains\mydomain.com\templates\css\style.css
),虽然outname
始终与 相同name
,但扩展名更改为.min.css
.
print()
如果我直接在cmd
终端中复制并粘贴第一次调用的结果,csso
将运行并缩小我的文件。但是,如果我调用一个运行 python 程序的批处理脚本,该程序最终运行上面的代码(作为它所做的事情的一部分),则什么也做不了,没有输出。
该subprocess.run
调用曾经是一个简单的shell
调用,没有输出。然而,我仍然没有输出。这是我通过手动运行(在标准错误中)获得的一些示例输出:
## parsing done in 16 ms
Compress block #1
[0.000s] init
[0.000s] clean
[0.015s] replace
[0.000s] prepare
[0.000s] mergeAtrule
[0.000s] initialMergeRuleset
[0.000s] disjoinRuleset
[0.016s] restructShorthand
[0.000s] restructBlock
[0.000s] mergeRuleset
[0.016s] restructRuleset
## compress done in 47 ms
## generate done in 0 ms
(python 版本的当前输出显示为空。如果它包含任何数据,则在标准cmd
工具中所有字节都打印为空)。
一个想法:有没有办法让subprocess.run
(或shell
)回显它执行的确切命令,以及确切的路径,所以我可以手动复制它,至少排除构造命令中的任何错误或引号中的差异等?理想情况下可能是二进制文件,因为这看起来像“两件事看起来完全相同但并不有趣” 。
其他相关标签:批处理、缩小。