os.system调用失效问题
背景
-
有个学员反馈allure无法生成报告
# 示例代码 import pytest,os def test_os(): pass if __name__ == '__main__': pytest.main(['-sv',__file__,'--alluredir','./report','--clean-alluredir']) os.system(f'allure serve ./report')
-
瞄了一眼代码,怀疑是pycharm运行模式问题(详见我之前的帖子关于allure和pycharm的运行模式)
-
她说改过了
-
仔细观察发现,report目录下是会生成内容的,但os那一行就不执行
调试
-
我把她的代码变为如下
import os os.system('dir')
-
运行一样没有任何返回
-
继续排查,直接用IDLE来试试
>>> import os >>> os.system('dir') -1 >>>
-
看来跟pycharm无关,跟python都无关,跟操作系统有关。
-
bing、百度、谷歌都用上了,没搜到(可能是没有搜对)
-
只能提交到stackoverflow了(国内的思否效率不如)
two days later…
stackoverflow
-
我的帖子:https://stackoverflow.com/questions/73524567/why-does-pythons-os-systemdir-return-1#
-
一个人的回复:https://stackoverflow.com/questions/31237544/in-python-interpreter-os-system-always-returns-1
-
摘录
I found a solution for this problem. I am posting the solution if someone faces the same problem in future. In my case, environment variable ComSpec was modified automatically by Microsoft SQL server update. I did modify it to the previous value, that was "%SystemRoot%\system32\cmd.exe". After modifying this environment variable, logoff and login again
-
最后夸一句stackoverflow,还是非常好的社区,只要你会问,基本都有有很好的答复,前提是得会问。
解决
-
远控该学员发现这个学员的comspec变量的值是2个一模一样的(如下内容),而我们一般都是一行。
%SystemRoot%\system32\cmd.exe
-
删除一行,保留一行
-
测试代码,ok,解决
引申
- 环境变量ComSpec指定命令提示符文件所在的路径与执行程序,貌似很简单
- 值可能会被一些软件更改(看原帖发现有人被SQL SERVER改了,这个学员的问题是被不知道什么软件double了)
- 这个值竟然会引起这个问题,没有好的解释(可能要微软专家来解释了)
- over