PyLint --init-hook 通过 subprocess.run() 不起作用(可能是转义问题)

问题描述 投票:0回答:1

我确实使用

pylint
在单元测试中运行
subprocess.run()
。 我需要使用
--init-hook=
pylint
功能来鼓励它找到我的模块。

我确实在 shell (bash) 上运行它,它按预期工作:

pylint qttools.py --disable=all --enable=E0401 --init-hook="from pathlib import Path; import sys;sys.path.append('./../common');"

未检测到错误 E0401。

现在我尝试复制它,但使用

subprocess.run()

Python 3.11.2 (main, Mar 13 2023, 12:18:29) [GCC 12.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from subprocess import run
>>> cmd = ['pylint', 'qttools.py', '--disable=all', '--enable=E0401']
>>> cmd.append('--init-hook="from pathlib import Path; import sys;sys.path.append(\'./../common\');"')
>>> run(cmd)
************* Module qttools
qttools.py:48:0: E0401: Unable to import 'snapshots' (import-error)
qttools.py:49:0: E0401: Unable to import 'tools' (import-error)
qttools.py:50:0: E0401: Unable to import 'logger' (import-error)

-------------------------------------------------------------------
Your code has been rated at 9.55/10 (previous run: 10.00/10, -0.45)

CompletedProcess(args=['pylint', 'qttools.py', '--disable=all', '--enable=E0401', '--init-hook="from pathlib import Path; import sys;sys.path.append(\'./../common\');"'], returncode=2)

我的假设是,逃离

'
路径周围的
common
是一个问题。我尝试了一些替代方案(切换
'
"
;通过
+
运算符构建字符串)。结果保持不变。

有什么想法吗?

编辑:顺便说一句:我知道如果我从这个存储库中创建一个正确且有效的Python包,我就不需要使用像这样的

--init-hook
sys.path
hacks。我正在研究这个,但它是 15 年前的臭 Python 代码。一步接着一步。 ;)

python pylint
1个回答
0
投票

我明白了。问题是我用

--init-hook
包围了
"
的值。

>>> cmd.append('--init-hook="from pathlib import Path; import ..."')
                            ^                                    ^

删除它效果很好。

>>> cmd.append('--init-hook=from pathlib import Path; import sys;sys.path.append(\'./../common\');')
© www.soinside.com 2019 - 2024. All rights reserved.