python win10系统下运行脚本命令发生的一系列问题,subprocess、os、system……
转载请标明出处:
https://dujinyang.blog.csdn.net/article/details/90045657
本文出自:【奥特曼超人的博客】
问题描述
执行一个子进程的命令,进程中读写一些文件,但是始终出现(系统拒绝)
的问题。
说到这里,很多人想到的应该是以管理员权限执行,但是很可惜,也失效了。
管理员权限,进程读写,dos超级管理员,都尝试了,无果。
**场景:**使用A包打入A渠道报错。
首先做了N个尝试,如下表格:
思路 | 描述 |
---|---|
思路1 | 更换母包,使用B包打入A渠道,发现可以。 |
思路2 | 更换渠道,使用A包打入B渠道,发现可以。 |
思路3 | A包打B渠道,可以。A包打A渠道,系统拒绝写入。B包打A渠道可以,其它渠道也可以。 |
1. 尝试的结论
# 运行拒绝
#
# A包-其它渠道没问题-A渠道挂彩(系统拒绝访问)
# B包-所有渠道都可以-A渠道也可以(不会拒绝)
#
# A渠道没问题
# A没问题
# 环境没问题
#
# 管机员运行 -- 效果没有改变
#
2. CMD和直接调用脚本对比
- 没有办法了,只能更换方法,使用CMD直接运行命令,发现是成功的。
- 抽取代码,直接在dos下调用它,发现也是拒绝的。
对比之后,可以得出结论,权限问题,但是很奇怪的是同个脚本,换个母包就可以了,这说明目录和脚本都是有权限的呀,这个问题估计要留给 微软的win10 解答了。
(蛋碎,虽然很喜欢疑难杂症,但是这种问题,TM根本控制不了啊。 )
3. 解决办法
当时尝试的办法有:
- 是否sublime的问题,打开进程发现读写都在java进程上,排除,加入cwt 可以控制路径。
- 管理员身份打开项目根目录的 cmd,想用管理员直接执行的,发现管理员权限也不行,进程不在这里。
- 想把获取管理员的命令加入到subprocess中,cmd中尝试发现很多问题,首先win10内部机制出于安全考虑,会默认把administrator的账户禁用并隐藏,这时需要
net user administrator /active:yes
开启,然后NET USER
展示用户,发现admin有了,但是,你还是无法使用的,当然,继续下去也有办法开启,但是代价太大,我们绕开它吧。
-
后来尝试了把用户改成了当前的,发现是可以运行的,但是这样就要涉及到进程交互了,太繁琐,加上还会弹出是否以界面来询问,最终选择放弃 ,只需要重启进入admin就可以继续操作了,不过不适合单用户存储的同学。( win10用户密码是你用户的密码,本地也会存储的,所以不用担心是否联网。)
-
最后想起新建一个管道执行的命令
os.popen()
,通过fork一个子进程,然后该子进程执行命令,缓存带就不管了。
尝试了一天的道路走完,已吐血。
最终编译成功,虽然绕过去成功了,但是还是不知道系统抽什么风 ,只有 A包的A渠道才会有问题。
|| 版权声明:本文为博主杜锦阳原创文章,转载请注明出处。