我正在python中编写一个git-hook,它将文件推送到存储库,如果文件没有通过linting要求,则拒绝推送。我已经使用php代码嗅探器为php写了一个类似的钩子,代码如下:
php_cs = subprocess.Popen(['phpcs', '--standard=' + self._standard], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out, err = php_cs.communicate(input="file contents".encode('utf-8'))
此代码适用于php_cs,但同样适用:
cat file.php | phpcs
据我所知,这是所有的python代码都在做。我想使用RuboCop为ruby做一些非常相似的事情。
使用与phpcs非常相似的python代码,rubocop版本如下:
rubo_cop = subprocess.Popen(['RuboCop'], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out, err = rubo_cop.communicate(input="file contents".encode('utf-8'))
这种情况下的输出如下:
这表明rubocop不理解这个输入的方式与phpcs理解的原因相同:
cat file.rb | rubocop
不适用于rubocop
我的问题如何将字符串传递给命令,以便将其视为文件?
答案 0 :(得分:2)
尝试cat file.php | xargs rubocop
这是我为rails项目提供的预提交脚本 https://gist.github.com/brendandeere/70510a0bc0cb54fd8427