python win10系统下subprocess.Popen(os.popen)引发的系统拒绝问题

python win10系统下运行脚本命令发生的一系列问题,subprocess、os、system……

转载请标明出处:
https://dujinyang.blog.csdn.net/article/details/90045657
本文出自:【奥特曼超人的博客】

问题描述

执行一个子进程的命令,进程中读写一些文件,但是始终出现(系统拒绝)的问题。
说到这里,很多人想到的应该是以管理员权限执行,但是很可惜,也失效了。

管理员权限,进程读写,dos超级管理员,都尝试了,无果。

**场景:**使用A包打入A渠道报错。

首先做了N个尝试,如下表格:

思路描述
思路1更换母包,使用B包打入A渠道,发现可以。
思路2更换渠道,使用A包打入B渠道,发现可以。
思路3A包打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有了,但是,你还是无法使用的,当然,继续下去也有办法开启,但是代价太大,我们绕开它吧。

NETPython
DUJINYANG管理员
dujinyang限制了

  • 后来尝试了把用户改成了当前的,发现是可以运行的,但是这样就要涉及到进程交互了,太繁琐,加上还会弹出是否以界面来询问,最终选择放弃 ,只需要重启进入admin就可以继续操作了,不过不适合单用户存储的同学。( win10用户密码是你用户的密码,本地也会存储的,所以不用担心是否联网。)
    win10超级管理员提权限

  • 最后想起新建一个管道执行的命令 os.popen() ,通过fork一个子进程,然后该子进程执行命令,缓存带就不管了。

尝试了一天的道路走完,已吐血。

os进程米奇云
最终编译成功,虽然绕过去成功了,但是还是不知道系统抽什么风 ,只有 A包的A渠道才会有问题。




|| 版权声明:本文为博主杜锦阳原创文章,转载请注明出处。
©️2020 CSDN 皮肤主题: 点我我会动 设计师:上身试试 返回首页