Python通过subprocess调用runas时密码输入失败报错求助
问题解决:subprocess调用runas输入密码失败
你的问题确实和换行符有关,还有一处参数格式错误,下面是具体修正方案:
错误原因
- 缺少换行符:runas等待密码输入时,需要输入完成后按回车确认,原代码只传入了密码字符串,没有添加Windows系统的换行符
\r\n,导致runas无法识别输入结束。 - 路径参数多余引号:用
subprocess.Popen的列表传参时,不需要给路径加额外双引号,subprocess会自动处理带空格的路径。原代码里的"C:\\foo\\bar.bat"会被runas识别为包含引号的路径,导致找不到目标脚本。
修正后的代码
import subprocess as sp # 去掉路径的多余引号,列表传参无需手动加引号 prog = sp.Popen( ['runas', '/user:user@domain.com', '/netonly', 'C:\\foo\\bar.bat'], stdin=sp.PIPE, encoding='utf-8' # 加上encoding参数,无需手动encode字符串 ) # 密码后添加\r\n模拟手动回车操作 prog.stdin.write('p@ssw0rd\r\n') prog.communicate()
补充说明
- 添加
encoding='utf-8'后,直接传入字符串即可,不用再手动调用encode方法,代码更简洁。 - 生产环境将密码存储在密钥保管库的方案符合安全规范,无需调整。
内容的提问来源于stack exchange,提问作者JasperKPI
相关产品推荐
相关产品推荐

