Python Subprocess.check_输出对windows上的node.js不执行任何操作?
我的自动缩小工具有一个奇怪的问题。我不得不用csso替换yuicompressor,因为yuicompressor自2013年以来就没有更新过,而且更新的css选择器有很多bug 这增加了复杂性(如涉及的“东西”的数量),以至于我不知道如何在执行命令时调试问题。(或者即使它被处决了) 我基本上已经将问题缩小到以下python代码段(目前添加了许多调试语句来帮助诊断问题): 请注意,Python Subprocess.check_输出对windows上的node.js不执行任何操作?,python,node.js,windows,cmd,csso,Python,Node.js,Windows,Cmd,Csso,我的自动缩小工具有一个奇怪的问题。我不得不用csso替换yuicompressor,因为yuicompressor自2013年以来就没有更新过,而且更新的css选择器有很多bug 这增加了复杂性(如涉及的“东西”的数量),以至于我不知道如何在执行命令时调试问题。(或者即使它被处决了) 我基本上已经将问题缩小到以下python代码段(目前添加了许多调试语句来帮助诊断问题): 请注意,getScriptPath()是一个小的辅助函数,它返回脚本文件所在的当前路径csso通过手动复制css/csso/
getScriptPath()
是一个小的辅助函数,它返回脚本文件所在的当前路径csso
通过手动复制css/csso/bin/csso下的文件来安装name
是一个字符串,它保存原始css文件的相对路径(通常类似于。/../domains\mydomain.com\templates\css\style.css
),而outname
始终与name
相同,但扩展名更改为.min.css
如果我直接在cmd
终端中复制并粘贴第一次print()
调用的结果,csso
将运行并缩小我的文件。但是,如果我调用一个批处理脚本来运行最终运行上述代码的python程序(作为其工作的一部分),什么都不做,没有输出
subprocess.run
调用过去是一个简单的shell
调用,它没有输出。然而,我仍然没有得到任何输出。下面是我通过手动运行它(在stderr中)获得的一些示例输出:
(python版本的当前输出显示为空。如果它包含任何数据,则所有字节在标准cmd
工具中打印为空)
一个想法是:有没有办法让subprocess.run
(或shell
)回显它执行的确切命令,以及从哪个路径回显,这样我就可以手动复制它,至少可以排除构造命令时的任何错误或引号中的差异,等等?理想情况下,可能是一个二进制文件,因为这看起来像“两件东西看起来完全相同,但不是”fun
其他相关标签:
批量,缩小。我已成功诊断出问题 在windows上,存在多个不同的路径变量。出现问题的机器在安装
node.js
后没有重新启动,路径可直接用于cmd
,但不可用于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)
## 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
>>> result2 = subprocess.check_output("echo \"Hello World\"", stderr=subprocess.STDOUT, shell=True)
except subprocess.CalledProcessError as exc:
print("ERROR: Failed to execute CSSO with error:", exc.returncode, exc.output)
print(result.decode())
>>> print(result2.decode())